2014-10-04 58 views
0

我对Objective-c有点新。我试图解析JSON数据,看起来像这是在一个单一的数组。下面将Json NSDictionary项目转换为字符串 - Objective C

[{"id":"3672","name":"TestName","color":"red","cost":456","date":"0000-00-00 00:00:00"}] 

是代码的目标C部分

FullUrl=[NSString stringWithFormat:@"http://mywebsite.com?user=%@",uservalue]; 
NSString *absoluteURl=[NSString string]; 
absoluteURl=[self URLEncodeString:FullUrl]; 

NSURL *url=[[NSURL alloc]initWithString:absoluteURl]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

NSData *data = [NSURLConnection sendSynchronousRequest:request 
             returningResponse:nil error:nil]; 

NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *parseJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil] 

现在我想知道我怎么可以采取每个键值为从parseJson一个字符串?比如我想的名字值到“字符串名称”等,

,当我把在线路的NSDictionary断点* parseJson =,并采取了光标它parseJson节目,如

<__NSCFArray 0x1dddb670>(
{ 
    name = "TestName"; 
    id = 3672; 
    color = red; 
    cost = "456"; 
    date = "0000-00-00 00:00:00"; 
} 
) 

因此,这意味着,JSON解析是在我的代码中工作正常吗?与json webservice Items订单相比,为什么订单不正确?

回答

3

您的JSON对象是一个字典数组。字典是无序的集合名称/值对,因此他们未必会留在他们在初始化相同的顺序


所以假设你的反应是这样的:

data:[{"id":"3672","name":"TestName","color":"red","cost":456","date":"0000-00-00 00:00:00"}] 

尝试它像这样的:

NSArray* dataArr = [parseJson objectForKey:@"data"]; 

for(NSDictionary *obj in dataArr){ 

NSString* Stringname = [obj objectForKey:@"name"]; 
NSString* Stringid = [obj objectForKey:@"id"]; 
NSString* Stringcolor = [obj objectForKey:@"color"]; 
NSString* Stringcost = [obj objectForKey:@"cost"]; 
NSString* Stringdate = [obj objectForKey:@"date"]; 
} 
+0

谢谢,我明白了。 – 2014-10-04 18:14:32

1

JSON对象是无序的一组名称/值对,因此它不会保持与初始化相同的顺序。

使用

NSString* Stringname = [parseJson objectForKey:@"name"]; 

访问元素字典

+0

我没有编辑它:P我在评论中说这不会工作,因为parseJson是一个数组 – 2014-10-04 12:01:43

+0

是的正确,objectForKey是特定于NSDictionary和Xcode显示警告,它不是NSArray。 – 2014-10-04 18:16:48

1

的顺序,因为你项目的NSDictionary这是一个无序的集合映射是不一样的。

是的,json解析返回正确的结果。

1

是它的做工精细,JSON
元素可以有秩序,
但是NSDictionary元素没有排序。

所以当JSON字符串转换为NSDictionary时,
顺序被洗牌。