【问题标题】:How to extract JSON array?如何提取 JSON 数组?
【发布时间】:2016-11-08 02:39:36
【问题描述】:

如何提取JSON 数据dictionary。我尝试了很多次,但无法提取特定的价值。我只得到第一个“business_category_name”,但值“name”下的“business_details”无法获取。怎么可能请帮忙。

谢谢

我的 JSON 数据

{
 "status": [
{
  "business_category_name": "Banks\/Credit Unions\/Landers",
  "business_details": [
    {
      "img_url": "http:\/\/edutimeapp.com\/toshow\/chamber-of-commerc\/member-logo\/1464667619-pnc.jpg",
      "name": "PNC Bank",
      "des": "PNC offers a wide range of services for all our customers, from individuals and small businesses, to corporations and government entities",
      "address": "",
      "email": "andrea.kendall@pnc.com",
      "phone": "260-422-5922",
      "member_since": "2016-05-31",
      "img_company": "http:\/\/edutimeapp.com\/toshow\/chamber-of-commerc\/member-logo\/1464667619-pnc.jpg",
      "website": "",
      "city": "Fort Wayne",
      "state": "IN",
      "zip": "46808"
    }
  ]
},
{
  "business_category_name": "Cleaning Services",
  "business_details": [
    {
      "img_url": "http:\/\/edutimeapp.com\/toshow\/chamber-of-commerc\/uploads\/logo250.png",
      "name": "tsst company",
      "des": "rudurgg ",
      "address": "2005 s calhoun ",
      "email": "",
      "phone": "2602496687",
      "member_since": "2016-05-31",
      "img_company": "http:\/\/edutimeapp.com\/toshow\/chamber-of-commerc\/uploads\/logo250.png",
      "website": "",
      "city": "fort wayne",
      "state": "in",
      "zip": "46825"
    }
  ]
}
 ]
 }

我的代码

- (void)viewDidLoad {
    [super viewDidLoad];
    NSURLRequest *req=[[NSURLRequest alloc]initWithURL:[NSURL  URLWithString:@"my url"]];
    response =[[NSMutableData alloc]init];
    [NSURLConnection connectionWithRequest:req delegate:self];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
     NSError *error;
     NSLog(@"Error in receiving data %@",error);
     NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves  error:&error];
     NSLog(@"response data %@",json);
     NSArray *items = [json objectForKey:@"status"];
     pass = [items valueForKey:@"business_category_name"];
     NSLog(@"get category %@",pass);
}

【问题讨论】:

  • 为了更方便,你可以创建一个模型类。

标签: ios objective-c json parsing nsarray


【解决方案1】:

你可以这样做,

NSArray *items = [json objectForKey:@"status"];

NSDictionary *firstObjOfItems = [items objectAtIndex:0];

NSString *business_category_name = [firstObjOfItems valueForKey:@"business_category_name"];

NSArray *business_details_Array = [firstObjOfItems objectForKey:@"business_details"];

NSDictionary *first_Object_of_business_details = [business_details_Array objectAtIndex:0]
;

NSString *name = [first_Object_of_business_details valueForKey:@"name"];
NSLog(@"name : %@",name);

您同样可以获取其他参数。您应该使用 for 循环遍历每个对象。这只是一个示例,说明如何到达您的 json 数据中的末尾元素。

希望这会有所帮助:)

【讨论】:

  • 只获取一个参数,我想获取所有名称值。
  • 是的,这就是为什么我提到使用 for 循环来获取每个对象的每个名称的原因。我认为您需要两个for loops 一个用于items 数组,一个用于business_details 数组,然后使用objectAtindex : ij 而不是0
  • 我需要在 UITableViewCell 中加载名称数组和名称数组
  • 然后创建一个可变数组,并从 for 循环的每次迭代中向该数组添加名称,然后使用该名称数组作为 tableview 的数据源
【解决方案2】:

如果你只想从数组中获取一个字典,试试这个

NSArray *statuses = [json objectForKey:@"status"];

for(NSDictionary *status in statuses){
   NSString *bussiness_category=[status valueForKey:@"business_category_name"];

   NSString *name=[[[status objectForKey:@"business_details"] firstObject] valueForKey:@"name"];

}

如果你想全部获取,试试这个。

创建一个可变数组并在其中添加所有名称并加载到如下表视图中

NSMutableArray *names = [NSMutableArray new];

NSArray *statuses = [json objectForKey:@"status"];

for(NSDictionary *status in statuses){
   NSString *bussiness_category=[status valueForKey:@"business_category_name"];

   for(NSDictionary *details in [status objectForKey:@"business_details"]){
         NSString *name=[details valueForKey:@"name"];
         [names addObject:name];
   }

}

希望对你有帮助。

【讨论】:

  • 如何将字符串名称存储在数组中并在表格视图中加载?
【解决方案3】:

这里dataFromApi是字符串JSON格式;

NSData *objectData = [dataFromApi dataUsingEncoding:NSUTF8StringEncoding];
id collection = [NSJSONSerialization JSONObjectWithData:objectData options:0 error:&error];

收到集合后可以使用键值对查找数据。

ex = string add = collection[@"name"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多