将 JSON 数据从 NSData 转换为 NSDictionary

Posted

技术标签:

【中文标题】将 JSON 数据从 NSData 转换为 NSDictionary【英文标题】:Converting JSON Data from NSData to NSDictionary 【发布时间】:2013-06-10 17:07:31 【问题描述】:

我有一个 php 服务,它以 NSData 格式返回以下响应。使用以下方法将其转换为 NSString 后:

NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

我得到以下信息:

[
    
        "Emp_Name": "Krishna Mamidi",
        "Emp_Designation": "Driver",
        "Emp_Type": "Permanent",
        "Joining_Date": "05-MAR-2011",
        "Salary": 10000
    ,
    
        "Emp_Name": "Aditya Reddy",
        "Emp_Designation": "supervisor",
        "Emp_Type": "Permanent",
        "Joining_Date": "06-MAR-2011",
        "Salary": 9000
    ,
    
        "Emp_Name": "Rajiv krishna",
        "Emp_Designation": "director",
        "Emp_Type": "Permanent",
        "Joining_Date": "01-MAR-2011",
        "Salary": 100000
    
]

以上是正确的 JSON 格式。

收到上面的NSData格式后,我用下面的把它转换成JSON字典:

NSError *error = nil;
id jsonObject = [NSJSONSerialization
                 JSONObjectWithData:data
                 options:NSJSONWritingPrettyPrinted error:&error];

NSDictionary *deserializedDictionary = nil;

if (jsonObject != nil && error == nil)

    if ([jsonObject isKindOfClass:[NSDictionary class]])
    
        //Convert the NSData to NSDictionary in this final step
        deserializedDictionary = (NSDictionary *)jsonObject;
    

但是,“反序列化字典”始终为 null 或为空。基本上它从来没有出现在上面的 If 循环中。

我一直在尝试解决这个问题,但无法解决。请帮忙

【问题讨论】:

字典数组... 【参考方案1】:

您的 json 对象是一个数组,尝试使用 NSArray 而不是 NSDictionary

【讨论】:

不敢相信这是一个如此简单的答案。感谢您的帮助:-)【参考方案2】:

因为返回的 JSON 是一个数组,而不是字典。试试:

NSLog(@"%@", NSStringFromClass([jsonObject class]));

【讨论】:

是的,使用数组而不是字典并解决了这个问题。感谢您的帮助

以上是关于将 JSON 数据从 NSData 转换为 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串转换为 NSData 以将其传递给 BLE 设备?

将 NSData 转换为 JSON 对象数组

我将一些数据发送到 web 服务,它返回一些 JSON 作为 NSData。如何转换为字典?(iOS 4.3)

将 JSON 转换为 NSData 以进行归档

使用 Swift 将 JSON 字符串转换为 NSDictionary

从 BLOB(FMDB 结果)转换为 NSData 对象