解析 JSON 后无法在 NSDictionary 中创建密钥

Posted

技术标签:

【中文标题】解析 JSON 后无法在 NSDictionary 中创建密钥【英文标题】:Unable to create keys into NSDictionary after parsing JSON 【发布时间】:2015-03-17 07:02:38 【问题描述】:

我见过与此类似的主题,但似乎没有一个能解决我的问题。我收到了这个 JSON:

("taskname: 1738 Main St., taskdescription: install flooring, worker: Jim Davis, approver: John Jones",
"taskname: 300 Market St., taskdescription: paint ceiling, worker: John Smith, approver: Bob Johnson"
)

这是我用来最终创建 NSDictionary 的代码:

NSURL *url = [NSURL URLWithString:MY_JSON_URL];
NSData *data = [NSData dataWithContentsOfURL:url];
NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:NULL];
NSArray *JSONarray = [JSONDictionary valueForKeyPath:@"feed.entry.content.$t"];

NSDictionary *taskDictionary = JSONarray[0];

NSLog(@"array content = %@",JSONarray)

数组值是正确的,但是当我尝试键入字典时,该键不存在

NSLog(@"dictionary contents = %@", taskDictionary[@"taskname"]);

我是 JSON 新手,非常感谢任何帮助!

【问题讨论】:

这不是有效的 JSON。它既不是数组[ "object1", "object2" ],也不是字典 "key1" : "object1", "key2" : "object2" 这更像是一个数组而不是 JSON。 字符串数组。对 ?你可以JSON Parse from NSString 但你的字符串也不是有效的 JSON 类型 【参考方案1】:

您收到的 JSON 无效,因此键“taskname”不存在。 应采用以下格式:

["taskname": "1738 Main St.", "taskdescription": "install flooring", "worker": "Jim Davis", "approver": "John Jones",
"taskname": "300 Market St.", "taskdescription": "paint ceiling", "worker": "John Smith", "approver": "Bob Johnson"]

【讨论】:

谢谢保罗,这就是我的怀疑。由于所有信息都在那里,有什么方法可以将我收到的内容转换为 NSDictionary 可以接受的格式? 这有点脏,但您可以尝试通过将 ':' 替换为 '": "' 和 ', ' 替换为 '"、"' 来编辑字符串。那么你应该有一个有效的 JSON 字符串

以上是关于解析 JSON 后无法在 NSDictionary 中创建密钥的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS 中解析推送通知 json?

iOS JSON 解析为 NSDictionary,然后使用 SBJson 解析为 NSArray

Swift:解析 JSON,NSDictionary 的 NSDictionary

JSON 和嵌套的 NSDictionary

将 json 解析为 NSDictionary [关闭]

将 JSON 数组转换为 NSDictionary 后,我该怎么办?