Php 将NSString解析为JSON

Php 将NSString解析为JSON,php,iphone,objective-c,json,parsing,Php,Iphone,Objective C,Json,Parsing,我读过几个论坛,但似乎无法完成这个简单的任务。我在Xcode中有一个指向PHP脚本的视图,并将结果存储为以下NSString: [{“id”:“16”,“name”:“Bob”,“age”:“37”}] 解析此NSString时遇到问题。以下是我获取NSString内容的方式: NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/json.php? id=%@",userId]; // to execut

我读过几个论坛,但似乎无法完成这个简单的任务。我在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"];

任何帮助都会很好。谢谢大家!

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

如果您的目标低于iOS 5,请使用类似以下的JSON解析器:

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

NSDictionary *dict= [strResult JSONValue];

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

顺便说一下,您的JSON字符串看起来像一个数组,您不能使用
objectForKey
NSArray
获取对象。您有两个选项,将JSON字符串响应修改为字典,或使用
objectAtIndex
获取对象。

使用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"]
试试这个

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"];
}

现在的NSJSONSerialization——如果您需要支持ios4和以下版本,请回过头来看看NSJSONSerialization。hanks@Daij Djan,我将尝试研究NSJSONSerialization。我正在为iOS5编程,所以应该可以正常工作?和xcode IDEDOWN无关投票者:唉。。。我今天做了什么?:)[留下评论总是一个好主意,我想说]这是解析JSON的正确方法,不知道为什么有人DV'd.@RichardJ.RossIII谢谢Richard,我可能会使用这种方法。我还在想办法把它放在哪里。。。我的NSString(strResult)将去哪里?它会取代(jsonString)吗?是的,就是它。。。但你已经有了数据,所以工作就更少了。我编辑了我的code@Daij-Djan无需将其来回转换为NSString和NSData。