3

JSON Model Library我正在使用由dchohfi开发的KeyValueObjectMapping。但是,在测绘JSON对象数组所面临的问题

我有一个JSON对象&各自的模型 -

{ 
"type": "flight", 
"senderid": "101", 
"message": 
{ 
    "origin": "Bangalore", 
    "destination": "Paris", 
    "start_date": "21-04-2017", 
    "end_date": "27-04-2017", 
    "price": "300", 
    "currency": "$", 
    "fare_rules": "This is the fare rules text.", 
    "refundable": "true", 
    "check_in_baggage": "30 kg", 
    "legs": [ 
     { 
      "index": "1", 
      "airline_id": "2003", 
      "flight_number": "TK 721 T", 
      "name": "Turkish Airline", 
      "logo": "http://turkish.com/logo.png", 
      "origin": "Bangalore", 
      "destination": "Chennai", 
      "start_date": "21-04-2017", 
      "end_date": "21-04-2017", 
      "start_time": "06.20 pm", 
      "end_time": "8.15 pm", 
      "journey_time": "2h 30m", 
      "is_next": "true", 
      "layover": "3 hours" 
     }, 
     { 
      "index": "2", 
      "airline_id": "4003", 
      "flight_number": "JT 021", 
      "name": "Jet Airways", 
      "logo": "http://jetairways.com/logo.png", 
      "origin": "Chennai", 
      "destination": "Paris", 
      "start_date": "21-04-2017", 
      "end_date": "21-04-2017", 
      "start_time": "11.20 pm", 
      "end_time": "2.15 am", 
      "journey_time": "3h 10m", 
      "is_next": "false", 
      "layover": "" 
     } 
    ] 
} 
} 

映射代码 -

DCParserConfiguration *config = [DCParserConfiguration configuration]; 

DCArrayMapping *mapper = [DCArrayMapping mapperForClassElements:[TRChatFlightLegModel class] forAttribute:@"legs" onClass:[TRChatFlightMessageModel class]]; 

[config addArrayMapper:mapper]; 

DCKeyValueObjectMapping *parser = [DCKeyValueObjectMapping mapperForClass:[TRChatTypeFlightsModel class] andConfiguration:config]; 

TRChatTypeFlightsModel *chatTextModel = [parser parseDictionary:message.data.message]; 

我的模型类是这样的:

@interface TRChatTypeFlightsModel : NSObject 

@property (strong, nonatomic) NSString *type; 
@property (assign, nonatomic) NSInteger senderid; 
@property (strong, nonatomic) TRChatFlightMessageModel *message; 

@end 

@interface TRChatFlightMessageModel : NSObject 

@property (strong, nonatomic) NSString *origin; 
@property (strong, nonatomic) NSString *destination; 
@property (strong, nonatomic) NSString *start_date; 
@property (strong, nonatomic) NSString *end_date; 
@property (strong, nonatomic) NSString *fare_rules; 
@property (strong, nonatomic) NSArray *flight_legs; 

@interface TRChatFlightLegModel : NSObject 

@property (strong, nonatomic) NSString *index; 
@property (strong, nonatomic) NSString *airline_id; 
@property (strong, nonatomic) NSString *is_next; 
@property (strong, nonatomic) NSString *layover; 

@end 

我为chatTextModel.message.origin获取价值,但获得nilchatTextModel.message.flight_legs。有什么建议么?

+0

你想从上面的JSON解析数据究竟是什么? – vaibhav

+0

@vaibhav,我想解析从上面的数据的一切,我得到的所有值,除了**腿**从JSON。 – iDilip

+0

好吧,检查我的答案。 – vaibhav

回答

0

变化模型类对象名 “flight_legs” 到 “”。因为在这里
JSON模型库做映射

JSON关键路径< ---->对象键路径

因此改变

@property (strong, nonatomic) NSArray *flight_legs; 

@property (strong, nonatomic) NSArray *legs; 
+0

我的错误。感谢@byJeevan,它工作。 – iDilip

+0

@iDilip很高兴工作.. – byJeevan

1

好的,这里是字典里面的字典,而legs是一个包含两个元素数组的字典。

你可以就这么简单获取JSON数据:

// returned string contaning JSON data 
NSData *data = [returnString dataUsingEncoding:NSUTF8StringEncoding]; 
// json can be NSDictionary *json 
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

// parsing data from main dict (JSON data) 
NSDictionary *innerDict1 = [json valueForKey:@"message"]; 

// now parsing data from message dict 
NSDictionary *innerDict2 = [innerDict1 valueForKey:@"legs"]; 

// parsing node of legs dict, can pass any key inside legs 
NSLog(@"values: %@", [innerDict2 valueForKey:@"airline_id"]); 

// getting values inside mutable array 
array1 = [innerDict2 valueForKey:@"index"];  
array2 = [innerDict2 valueForKey:@"airline_id"]; 
相关问题