我对Objective-c有点陌生。我正在尝试解析看起来像这样在单个数组中的 json 数据。
[{"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 上取 curser 时,它显示为
<__NSCFArray 0x1dddb670>(
{
name = "TestName";
id = 3672;
color = red;
cost = "456";
date = "0000-00-00 00:00:00";
}
)
所以这意味着,json解析在我的代码中工作正常?为什么与 json 网络服务项目顺序相比顺序不正确。
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"];
}
顺序不同,因为您的项目映射在一个无序集合NSDictionary
中。
是的,json 解析返回正确的结果。
是的,它工作正常,
JSON 中的元素可以有顺序,
但 NSDictionary 元素不是有序的。
因此,当JSON字符串转换为NSDictionary时,
顺序被打乱。
JSON 对象是一组无序的名称/值对,因此它不会保持与初始化相同的顺序。
用
NSString* Stringname = [parseJson objectForKey:@"name"];
访问字典中的元素