2

我已经阅读了几个论坛,但似乎无法完成这个简单的任务。我在 Xcode 中有一个指向 PHP 脚本的视图,并将结果存储为下面的 NSString:

[{"id":"16","name":"Bob","age":"37"}]

我无法解析这个 NSString。这就是我获取 NSString 内容的方式:

NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/json.php?
id=%@",userId];

// to execute php code
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

// to receive the returend value
NSString *strResult = [[NSString alloc] initWithData:dataURL 
encoding:NSUTF8StringEncoding];

如何将结果 (strResult) 转换为 JSON 并从中取出对象?我会假设它如下所示,但我知道我错过了一些东西

NSString *name = [objectForKey:@"name"];
NSString *age = [objectForKey:@"age"];

任何帮助都会很棒。谢谢!

4

3 回答 3

13

使用类 NSJSONSerialization 来读取它

id jsonData = [string dataUsingEncoding:NSUTF8StringEncoding]; //if input is NSString
id readJsonDictOrArrayDependingOnJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];

在你的情况下

NSArray *readJsonArray = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:nil];
NSDictionary *element1 = readJsonArray[0]; //old style: [readJsonArray objectAtIndex:0]
NSString *name = element1[@"name"]; //old style [element1 objectForKey:@"name"]
NSString *age = element1[@"age"]; //old style [element1 objectForKey:@"age"]
于 2012-12-01T23:59:56.273 回答
3

试试这个....

NSString * strResult = [[NSString alloc] initWithData:responseMutableData encoding:NSUTF8StringEncoding];  
SBJSON *jsonParser = [[SBJSON alloc]init];
if([[jsonParser objectWithString:strResult] isKindOfClass:[NSArray class]])
{
    NSArray *jsonArr=[jsonParser objectWithString: strResult];
    NSDictionary *firstDictonary = [jsonArr objectAtIndex:0];
    NSString *name = [firstDictonary valueForKey:@"name"];
    NSString *age = [firstDictonary valueForKey:@"age"];
}
于 2012-12-03T07:18:21.037 回答
0

如果您的目标是 iOS 5 及更高版本,只需使用 NSJSONSerialization

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html

如果您的目标低于 iOS 5,请使用这样的 JSON 解析器:http: //stig.github.com/json-framework/

只需在 JSON 字符串上调用 JSONValue (或等效)方法:

NSDictionary *dict= [strResult JSONValue];

NSString *name = [dict objectForKey:@"name"];
NSString *age = [dict objectForKey:@"age"];

顺便说一句,你的 JSON 字符串看起来像一个数组,你不能用来objectForKeyNSArray. 您有两个选择,将您的 JSON 字符串响应修改为字典或用于objectAtIndex获取对象。

于 2012-12-01T23:55:24.710 回答