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

Posted

技术标签:

【中文标题】我将一些数据发送到 web 服务,它返回一些 JSON 作为 NSData。如何转换为字典?(iOS 4.3)【英文标题】:I send some data to a webservice, it returns some JSON as NSData. How to convert to Dict?(iOS 4.3) 【发布时间】:2012-07-05 07:44:25 【问题描述】:

我将一些凭据发送到网络服务。

我可以得到 NSData 或 NSString 的响应。

将(NSData 或 NSString)JSON 转换为 NSDictionary 以便我处理它的最简单方法是什么?

ios4.3 构建 非常感谢, -代码

【问题讨论】:

第一次复制: NSDataNSString => Here。 第二次复制:“JSON”到NSDictionary => Here。 【参考方案1】:

从 iOS 5.0 起,您可以使用NSJSONSerialization,文档here。

有一个很好的使用教程,here。

【讨论】:

【参考方案2】:

使用链接下载 SBJsonParser 框架,http://github.com/stig/json-framework/downloads 并将所需的类添加到您的项目 (SBJsonParser.h)。

导入 SBJsonParser.h 并使用以下代码,

    SBJsonParser *parser = [[SBJsonParser alloc] init];

     //dictionary with name,id
     NSDictionary *jsonObject = [parser objectWithString:jsonString error:NULL];  

     //name array                
      NSMutableArray *nameArray = [[NSMutableArray alloc]init];
   for (NSMutableDictionary *dic in jsonObject)

      [nameArray addObject:[dic valueForKey:@"name"]];
    

【讨论】:

【参考方案3】:

使用这个:

NSString *urlString = [NSString stringWithFormat:kURLString,self.chapter,self.page];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[urlString dataUsingEncoding:NSISOLatin1StringEncoding]];

NSData* responseData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSISOLatin1StringEncoding];


NSDictionary* result = [(NSDictionary*)[responseString JSONValue] objectForKey:@"Result"];

【讨论】:

JSONValue 方法来自什么库? 您必须在项目中添加 JSON 类,为此从 gitHub 下载它,然后在您要解析数据的所需类中 #import "JSON.h"。【参考方案4】:

我用的是 SBJson

NSArray *arrObj = (NSArray*)[[JsonParser sharedJsonParser] getObjectsFromJsonString:responseString];

这里的响应字符串是一个JSON字符串

【讨论】:

以上是关于我将一些数据发送到 web 服务,它返回一些 JSON 作为 NSData。如何转换为字典?(iOS 4.3)的主要内容,如果未能解决你的问题,请参考以下文章

您可以将日志数据从生物识别设备发送到 Web 服务器吗?

php脚本得到两个ajax请求,只返回一个?

在 cocos2d iphone 中将字节数据发送到 Web 服务

web 实现大量打印

如何将 JQuery AJAX 请求中的数据发送到 Node.js 服务器

如何通过 Kinesis 将数据从 Lambda (Python) 发送到 Redshift