如何在IOS中为这个Json响应dynamic创build可变字典

这是我的JSON响应1的时间inputSpent_on:“2015-12-27”

{ "A": { "user": { "id": 1, "name": "B" }, "startday": "2015-12-27", "status": "New", "total": 2, "time_entries": [{ "id": 768, "project": { "id": 8, "name": "C" }, "user": { "id": 1, "name": "B" }, "activity": { "id": 8, "name": "D" }, "hours": 2, "comments": "", "spent_on": "2015-12-27" }] } } 

我已经创build了这样的字典格式来做后期操作:

 NSDictionary * response =@{@"A": @{@"user": @{@"id": @1,@"name": @"B"},@"startday@": @"2015-12-27",@"status@": @"New",@"total@": 2,@"time_entries@": [{@"id@": 768,@"project@": {@"id@": 8,@"name": @"C"},@"user": {@"id": 1,@"name": @"B"},@"activity": {@"id": 8,@"name": @"D"},@"hours": 2,@"comments": @"",@"spent_on": @"2015-12-27"}]}}; 

这是我的JSON响应2时间inputSpent_on:“2015-12-27”和“2015-12-28”

 { "A": { "user": { "id": 1, "name": "B" }, "startday": "2015-12-27", "status": "New", "total": 6, "time_entries": [{ "id": 768, "project": { "id": 8, "name": "C" }, "user": { "id": 1, "name": "B" }, "activity": { "id": 8, "name": "D" }, "hours": 2, "comments": "", "spent_on": "2015-12-27" }, { "id": 775, "project": { "id": 8, "name": "C" }, "user": { "id": 1, "name": "B" }, "activity": { "id": 8, "name": "D" }, "hours": 4, "comments": "", "spent_on": "2015-12-28" }] } } 

json响应2有一个更多的time_entry id,hours,spent_on比json response1.similarly,对于每个新的date(spent_on)每个新的时间input。一个新的时间条目id将生成,并且响应长度也会增加。

所以,如何为上面的响应创build可变的字典或字典,以及如果不同的小时和不同的date会发生(例如一个整周),那么如何为它创build字典呢?否则任何其他的方式来做到这一点。谢谢提前。

 char* jsonCStr = "{ \ \"A\": { \ \"user\": { \ \"id\": 1, \ \"name\": \"B\" \ }, \ \"startday\": \"2015-12-27\", \ \"status\": \"New\", \ \"total\": 2, \ \"time_entries\": [ \ { \ \"id\": 768, \ \"project\": { \ \"id\": 8, \ \"name\": \"C\" \ }, \ \"user\": { \ \"id\": 1, \ \"name\": \"B\" \ }, \ \"activity\": { \ \"id\": 8, \ \"name\": \"D\" \ }, \ \"hours\": 2, \ \"comments\": \"\", \ \"spent_on\": \"2015-12-27\"\ } \ ] \ } \ }"; NSString* jsonStr = [NSString stringWithCString:jsonCStr encoding:NSUTF8StringEncoding]; NSData* jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil]; 

你问:

那么,如何为上面的响应创build可变字典或字典呢?

当使用JSONObjectWithDataparsing它时,请使用NSJSONReadingMutableContainers选项。 这将导致可变的字典/数组。

 NSError *error; NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

如果不同的时间和不同的date会发生(例如一整个星期)。那么如何创build字典呢?

所以,得到一个可变的时间条目数组的引用:

 NSMutableArray *timeEntries = dictionary[@"A"][@"time_entries"]; 

然后添加你想要的新date:

 [timeEntries addObject:@{@"id": @768, @"project": @{@"id": @8, @"name": @"C"}, @"user": @{@"id": @1, @"name": @"B"}, @"activity": @{@"id": @8, @"name": @"D"}, @"hours": @2, @"comments": @"", @"spent_on": @"2015-12-29"}]; 

只需要重复(或循环)。