将 Json 转换为 NSDictionary
Posted
技术标签:
【中文标题】将 Json 转换为 NSDictionary【英文标题】:Convert Json to NSDictionary 【发布时间】:2016-09-08 07:04:58 【问题描述】:我正在尝试将序列化的Json
字符串转换为NSDictionary
,但没有找到任何将序列化的Json
转换为NSDictionary
的解决方案。
这是我的回复字符串
"id":2,"parent_id":1,"lft":2,"rght":3,"name":"Audio Engineering","images":["id":22,"user_id":2,"name":"iStock_000027023404_Small","url":"https:\/\/pbs.twimg.com\/profile_images\/97601593\/Picture_3_400x400.png","alt":"iStock_000027023404_Small","description":"","thumbnail":"a:3:i:0;a:4:s:4:\"name\";s:25:\"iStock_000027023404_Small\";s:5:\"width\";i:30;s:6:\"height\";i:30;s:3:\"url\";s:58:\"\/uploads\/2016\/09\/thumb\/small\/iStock_000027023404_Small.jpg\";i:1;a:4:s:4:\"name\";s:25:\"iStock_000027023404_Small\";s:5:\"width\";i:90;s:6:\"height\";i:90;s:3:\"url\";s:59:\"\/uploads\/2016\/09\/thumb\/medium\/iStock_000027023404_Small.jpg\";i:2;a:4:s:4:\"name\";s:25:\"iStock_000027023404_Small\";s:5:\"width\";i:230;s:6:\"height\";i:230;s:3:\"url\";s:67:\"\/uploads\/2016\/09\/thumb\/medium_251x230\/iStock_000027023404_Small.jpg\";","created":"2016-09-07T06:24:09+00:00","modified":"2016-09-07T06:24:09+00:00","_joinData":"id":12,"category_id":2,"image_id":22]
我正在尝试将其转换为 NSDictionary
。在此键 Thumbnail
的值中是我无法解析的序列化数据。
我试过了
NSData *data = [[self getJsonnResponse] dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
if (error)
NSLog(@"%@",[error description]);
else
NSLog(@"%@",json);
它给我带来了错误
Error Domain=NSCocoaErrorDomain Code=3840 “字符 291 周围的对象格式错误。” UserInfo=NSDebugDescription=字符 291 周围的对象格式错误。
【问题讨论】:
Deserialize JSON / NSDictionary to Swift objects的可能重复 你能出示你的代码吗 你的缩略图是字符串,它包含 JSON 字符串 嘿,请检查我更新的问题 #Dejan Skledar 链接中的问题没有为我的问题提供解决方案,因为链接中的问题是将 Json 或 NSDictionary 转换为 Swift obj 但我的问题是如何将上述字符串转换为 NSDictionary 并获取缩略图内容。 【参考方案1】:字符 291 表示索引 291 处的字符。关于 JSON 响应
你的问题在这里,不是有效的部分
"thumbnail":"a:3:i:0;a:4:s:4:\"name\";s:25:\"iStock_000027023404_Small\";s:5:\"width\";i:30;s:6:\"height\";i:30;s:3:\"url\";s:58:\"\/uploads\/2016\/09\/thumb\/small\/iStock_000027023404_Small.jpg\";i:1;a:4:s:4:\"name\";s:25:\"iStock_000027023404_Small\";s:5:\"width\";i:90;s:6:\"height\";i:90;s:3:\"url\";s:59:\"\/uploads\/2016\/09\/thumb\/medium\/iStock_000027023404_Small.jpg\";i:2;a:4:s:4:\"name\";s:25:\"iStock_000027023404_Small\";s:5:\"width\";i:230;s:6:\"height\";i:230;s:3:\"url\";s:67:\"\/uploads\/2016\/09\/thumb\/medium_251x230\/iStock_000027023404_Small.jpg\";
后端检查一次,询问JSON的清晰格式
【讨论】:
【参考方案2】:这是错误的json
甲酸盐,我在这里看到的可能是您的网络开发人员将日志检查array
和dictionary
生成是否正确。
请让 Web 开发人员解决此问题。
您的Thumbnail
提议的JSON
是这样的:
"name": "iStock_000027023404_Small";
"width": 30;
"height": 30;
"url": "/uploads/2016/09/thumb/small/iStock_000027023404_Small.jpg";
"name": "iStock_000027023404_Small";
"width": 90;
"height": 90;
"url": "/uploads/2016/09/thumb/medium/iStock_000027023404_Small.jpg";
"name": "iStock_000027023404_Small";
"width": 230;
"height": 230;
"url": "/uploads/2016/09/thumb/medium_251x230/iStock_000027023404_Small.jpg";
也许对你有帮助。
【讨论】:
【参考方案3】:使用以下方法在解析之前检查json objcet是否有效
NSData *data = [responseString dataUsingEncoding:NSUTF8StringEncoding];
if([NSJSONSerialization isValidJSONObject:data])
// here parse your json data
【讨论】:
【参考方案4】:使用以下代码将 json 转换为字典。
NSError * 错误;
NSData *data =[jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary * responseDict;
如果(数据!=无)
responseDict = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];
返回响应字典;
【讨论】:
以上是关于将 Json 转换为 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章
无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV
我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题