将 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 甲酸盐,我在这里看到的可能是您的网络开发人员将日志检查arraydictionary 生成是否正确。 请让 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 转换器将 JSON 转换为 c# 时遇到问题

将 node.js 缓冲区转换为字符串,然后转换为 JSON

将嵌套 JSON 转换为简单 JSON

将 JSON 数据转换为字典