0

我在反序列化 JSON 值时遇到问题。

这是我的代码:

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

正如您在下面的打印屏幕中看到的(这是在执行上面代码的最后一行之后立即拍摄的),字典 innerObject 中的项目包含特殊字符,这些字符在 innerJson 中不存在。有人可以帮助我,为什么会发生这种情况?

在此处输入图像描述

编辑 - 添加了来自控制台的变量描述

内部JSON:

{"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 字符)等效的十六进制数字。(例如 \u00a4 代表 ¤ )

参考http://www.json.org

于 2013-09-09T19:30:22.443 回答