[英]How to parse such a json array?
我在尝试解析以下json数组时遇到困难。 如何解析。 网络中的其他答案似乎无法解决我的问题。
{
"status": 1,
"value": {
"details": [
{
"shipment_ref_no": "32",
"point_of_contact": {
"empid": ""
},
"products": {
"0": " Pizza"
},"status": "2"
},
{
"shipment_ref_no": "VAPL/EXP/46/14-15",
"point_of_contact": {
"empid": "60162000009888"
},
"products": {
"0": "MAIZE/CORN STARCH"
},
"status": "5"
}
]
}
}
我必须访问每个键的值。
以下是我的代码
NSString* pendingResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *jsonData = [pendingResponse dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
NSArray *argsArray = [[NSArray alloc] initWithArray:[jsonDic objectForKey:@"details"]];
NSDictionary *argsDict = [[NSDictionary alloc] initWithDictionary:[argsArray objectAtIndex:0]];
NSLog(@"keys = %@", jsonDic[@"values"]);
这是解析整个字典的方法:
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray *details = [[dataDictionary objectForKey:@"value"] objectForKey:@"details"];
for (NSDictionary *dic in details) {
NSString *shipmentRefNo = dic[@"shipment_ref_no"];
NSDictionary *pointOfContact = dic[@"point_of_contact"];
NSString *empId = pointOfContact[@"empid"];
NSDictionary *products = dic[@"products"];
NSString *zero = products[@"0"];
NSString *status = dic[@"status"];
}
NSString *pendingResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *jsonData = [pendingResponse dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
NSArray *argsArray = [[NSArray alloc] initWithArray:[jsonDic objectForKey:@"details"]];
//argsArray holds objects in form of NSDictionary.
for(NSDictionary *response in argsArray) {
//String object
NSLog(@"%@", [response valueForKey:@"shipment_ref_no"]);
//Dictionary object
NSLog(@"%@", [[response objectForKey:@"point_of_contact"] valueForKey:@"empid"]);
//String object
NSLog(@"%@", [response valueForKey:@"status"]);
//Dictionary object
NSLog(@"%@", [[response objectForKey:@"products"] valueForKey:@"0"]);
}
我相信您一定应该要求服务器开发人员更新响应格式。
另外,您始终可以使用Model类来解析数据。 请检查一下如何将NSDictionary转换为自定义对象 。
是的,我正在使用此网站来检查我的json响应。
你可以解析...
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
NSDictionary *dictValue = [[NSDictionary alloc] initWithDictionary:[jsonDic objectForKey:@"value"]];
NSArray *arrDetails = [[NSArray alloc] initWithArray:[dictValue objectForKey:@"details"]];
for (int i=0; i<arrDetails.count; i++)
{
NSDictionary *dictDetails=[arrDetails objectAtIndex:i];
NSDictionary *dictContact = [[NSDictionary alloc] initWithDictionary:[dictDetails objectForKey:@"point_of_contact"]];
NSDictionary *dictProduct = [[NSDictionary alloc] initWithDictionary:[dictDetails objectForKey:@"products"]];
}
编辑:以下答案在javascript中!
您可以使用以下方式解析json数据:
var array = JSON.parse(data);
然后您将获得如下所示的所有信息:
var refno = array["value"]["details"][0]["shipment_ref_no"];
NSDictionary *response = //Your json
NSArray *details = response[@"value"][@"details"]
等。很容易
如下更新代码。 您正在尝试从顶层读取details
数组,而在您的数据中则是使用value
键。 因此,您应该阅读值dict,并在其中阅读details数组。
NSString* pendingResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *jsonData = [pendingResponse dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
NSDictionary *valueDict = [jsonDic objectForKey:@"value"];
NSArray *argsArray = [[NSArray alloc] initWithArray:[valueDict objectForKey:@"details"]];
NSDictionary *argsDict = [[NSDictionary alloc] initWithDictionary:[argsArray objectAtIndex:0]];
NSLog(@"keys = %@", jsonDic[@"values"]);
我认为您的问题是您有:
NSLog(@"keys = %@", jsonDic[@"values"]);
但是应该是:
NSLog(@"keys = %@", jsonDic[@"value"]);
以下是解析JSON数组的代码。 我曾经从文件中解析JSON数组,但是您也可以使用响应链接来做到这一点。
// using file
NSString *str = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"];
NSData *data = [[NSData alloc]initWithContentsOfFile:str];
NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSMutableDictionary *dictValues = [[NSMutableDictionary alloc]initWithDictionary:[dict valueForKey:@"value"]];
NSMutableArray *array = [[NSMutableArray alloc]initWithArray:[dictValues valueForKey:@"details"] copyItems:YES];
NSLog(@"Array Details :- %@",array);
// using url
NSURL *url = [NSURL URLWithString:@"www.xyz.com"]; // your url
NSData *data = [[NSData alloc]initWithContentsOfURL:url];
NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSMutableDictionary *dictValues = [[NSMutableDictionary alloc]initWithDictionary:[dict valueForKey:@"value"]];
NSMutableArray *array = [[NSMutableArray alloc]initWithArray:[dictValues valueForKey:@"details"] copyItems:YES];
NSLog(@"Array Details :- %@",array);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.