Ios 在DetailViewController中将JSON字符串转换为NSDictionary

Ios 在DetailViewController中将JSON字符串转换为NSDictionary,ios,json,uitableview,nsdictionary,nsdata,Ios,Json,Uitableview,Nsdictionary,Nsdata,试图找出为什么从tableviewcontroller到detailviewcontroller的json序列不起作用。做了一个NSLog以查看数据是否通过,这是dvc中显示的 "data.detail" NSLog: ( { emails = { 10 = j; 11 = k; 12 = l; 9 = i; }; li

试图找出为什么从tableviewcontroller到detailviewcontroller的json序列不起作用。做了一个NSLog以查看数据是否通过,这是dvc中显示的

"data.detail" NSLog:

(
        {
        emails =         {
            10 = j;
            11 = k;
            12 = l;
            9 = i;
        };
        links =         {
            1 = a;
            2 = b;
            3 = c;
            4 = d;
        };
        location =         {
            13 = m;
            14 = n;
            15 = o;
            16 = p;
        };
        numbers =         {
            5 = e;
            6 = f;
            7 = g;
            8 = h;
        };
    }
)
然后我

尝试将json数据转换为detailviewcontroller中的tableview

NSString *rawString = [NSString stringWithFormat:@"%@", data.detail];
NSString *jsonString = rawString;
NSData *JSONdata = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *jsonError = nil;
但将JSON转换为NSData后,NSDictionary只在NSLog中输出“null”

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:JSONdata options:0 error:&jsonError];
NSArray *items = [dic valueForKeyPath:@"email"];
NSLog(@"dic %@", dic);
NSLog(@"items %@", items);

救命啊!非常感谢。

您好,您的
JSON
无效,因此无法使用

首先来看一个
JSON
的例子:

然后您可以在这里尝试您的
JSON
:jsonlint.com

以下是格式良好的
JSON
的开头:

{
"emails": {
    "9": "i",
    "10": "j",
    "11": "k",
    "12": "l"
},
"links": {
    "1": "a",
    "2": "b",
    "3": "c",
    "4": "d"
}
}
主要将
=
改为
并添加了一些


祝你好运。

在代码行下面更改

NSArray *items = [dic valueForKeyPath:@"email"];

如果仍然得到nslog nil,则更改

NSString *rawString = [NSString stringWithFormat:@"%@", data.detail];
喜欢这个

NSString *rawString = @"{\"emails\" :{\"10\" : \"j\",\"11\" : \"k\",\"12\" : \"l\",\"9\" : \"i\"},\"links\" :{\"1\" : \"a\",\"2\" : \"b\",\"3\" : \"c\",\"4\" : \"d\"}}";
有两种可能,但您没有显示足够的信息:

data.detail都是一个NSString。在这种情况下,这行代码完全没有用处,因为它只是制作字符串副本的一种昂贵的方法,而该字符串根本不包含任何JSON

或者data.detail是一个NSDictionary。在这种情况下,您的整个代码完全是误入歧途的废话,因为在这种情况下,您有一个NSDictionary,尝试将它转换为一个JSON字符串,使用不起作用的代码,将该字符串转换为NSData,然后将NSData转换回字典,这就是您的起点


纯粹出于病态的好奇,是哪一个?

你确定json语法正确吗?它以“(”开头,以“)”结尾,对吗?我还更改了json并添加了“[”和“]“查看是否可以工作但仍然为null。data.detail不是有效的JSON。不要使用valueForKeyPath,而是使用objectForKey,它的速度是valueForKeyPath的十倍,而且与valueForKeyPath不同,它总是可以工作的。创建原始字符串的方式相当愚蠢。你为什么不直接使用data.detail呢?你最好的朋友在这里:谢谢你,你发布的rawsting格式很有帮助,这是我的修正。
NSString *rawString = @"{\"emails\" :{\"10\" : \"j\",\"11\" : \"k\",\"12\" : \"l\",\"9\" : \"i\"},\"links\" :{\"1\" : \"a\",\"2\" : \"b\",\"3\" : \"c\",\"4\" : \"d\"}}";
NSString *rawString = [NSString stringWithFormat:@"%@", data.detail];