0

JSON 値の逆シリアル化に問題があります。

ここに私のコードがあります:

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData: data options:0 error: &errorJson];
NSString *innerJson = responseDict[@"d"];
NSMutableDictionary *innerObject = [innerJson JSONValue];

次の印刷画面 (上記のコードの最後の行を実行した直後) でわかるように、辞書 innerObject の項目には、innerJson にはない特殊文字が含まれています。なぜこれが起こるのですか?

ここに画像の説明を入力

編集 - コンソールからの変数の説明を追加

innerJson:

{"ret" : "1",  "msg" : "",  "list" : ["Granatapfel¤200g¤1", "Brombeeren¤300g¤1", "Papaya (100 g)¤3¤0", "EPF Müesli 1 Messlöffel¤2¤1", "grüner Spargel (190 g)¤2¤1", "Chicorée (130 g)¤1¤0", "mageres Kalbfleisch (190 g)¤3¤0", "Zander (160 g)¤6¤0", "Bachsaibling (190 g)¤2¤0", "Seeteufel (160 g)¤1¤0", "EPF Guetzli Hafer/\nKartoffel-Dinkel 3 Stk.¤0¤0"]}

内部オブジェクト:

{
    list =     (
        "Granatapfel\U00a4200g\U00a41",
        "Brombeeren\U00a4300g\U00a41",
        "Papaya (100 g)\U00a43\U00a40",
        "EPF M\U00fcesli 1 Messl\U00f6ffel\U00a42\U00a41",
        "gr\U00fcner Spargel (190 g)\U00a42\U00a41",
        "Chicor\U00e9e (130 g)\U00a41\U00a40",
        "mageres Kalbfleisch (190 g)\U00a43\U00a40",
        "Zander (160 g)\U00a46\U00a40",
        "Bachsaibling (190 g)\U00a42\U00a40",
        "Seeteufel (160 g)\U00a41\U00a40",
        "EPF Guetzli Hafer/\nKartoffel-Dinkel 3 Stk.\U00a40\U00a40"
    );
msg = "";
ret = 1;

}

4

2 に答える 2

0

JSON 値に問題はありません。すべての Unicode 文字を逐語的descriptionに出力する方法。NSString

"Granatapfel¤200g¤1"

一方、andのdescriptionメソッドは、すべての非 ASCII 文字をエスケープとして出力します。たとえば、の代わりに:NSDictionaryNSArray\Unnnn\U00a4¤

"Granatapfel\U00a4200g\U00a41"

から文字列値を抽出する場合innerObject、たとえば

NSString *s = innerObject["list"][0];
NSLog(@"%@", s);

次に、すべての値が正しく保存されていることがわかります。

于 2013-09-09T19:59:16.123 に答える
-1

配列の項目には文字列が含まれており、json の文字列は次の方法で表すことができます。

ここに画像の説明を入力

内部オブジェクトには、innerjson に存在する特殊文字 (Unicode 文字) に相当する 16 進数が含まれています。(例: \u00a4 は ¤ を表します)

参照http://www.json.org

于 2013-09-09T19:30:22.443 に答える