从字符串中获取特定字符串的值

时间:2013-11-08 13:26:04

标签: ios objective-c json string

嗨我有以下格式的字符串

{
   results : [
      {
         address_components : [
            {
               long_name : 18,
               short_name : 18,
               types : [ street_number ]
            },
            {
               long_name : Great Russell Street,
               short_name : Great Russell St,
               types : [ route ]
            },
            {
               long_name : London,
               short_name : London,
               types : [ locality, political ]
            },
            {
               long_name : London Borough of Camden,
               short_name : London Borough of Camden,
               types : [ administrative_area_level_3, political ]
            },
            {
               long_name : Greater London,
               short_name : Gt Lon,
               types : [ administrative_area_level_2, political ]
            },
            {
               long_name : England,
               short_name : England,
               types : [ administrative_area_level_1, political ]
            },
            {
               long_name : United Kingdom,
               short_name : GB,
               types : [ country, political ]
            },
            {
               long_name : WC1B,
               short_name : WC1B,
               types : [ postal_code_prefix, postal_code ]
            },
            {
               long_name : London,
               short_name : London,
               types : [ postal_town ]
            }
         ],
         formatted_address : 18 Great Russell Street, London WC1B, UK,
         geometry : {
            location : {
               lat : 51.5183152,
               lng : -0.1262053
            },
            location_type : ROOFTOP,
            viewport : {
               northeast : {
                  lat : 51.51966418029149,
                  lng : -0.124856319708498
               },
               southwest : {
                  lat : 51.51696621970849,
                  lng : -0.127554280291502
               }
            }
         },
         types : [ street_address ]
      },
      {
         address_components : [
            {
               long_name : Suite 5,
               short_name : Suite 5,
               types : [ subpremise ]
            },
            {
               long_name : Russell House,
               short_name : Russell House,
               types : [ premise ]
            },
            {
               long_name : 37,
               short_name : 37,
               types : [ street_number ]
            },
            {
               long_name : Great Russell Street,
               short_name : Great Russell St,
               types : [ route ]
            },
            {
               long_name : Greater London,
               short_name : Gt Lon,
               types : [ administrative_area_level_2, political ]
            },
            {
               long_name : United Kingdom,
               short_name : GB,
               types : [ country, political ]
            },
            {
               long_name : WC1B 3PP,
               short_name : WC1B 3PP,
               types : [ postal_code ]
            },
            {
               long_name : London,
               short_name : London,
               types : [ postal_town ]
            }
         ],
         formatted_address : Suite 5, Russell House, 37 Great Russell Street, London WC1B 3PP, UK,
         geometry : {
            location : {
               lat : 51.517836,
               lng : -0.127217
            },
            location_type : APPROXIMATE,
            viewport : {
               northeast : {
                  lat : 51.51918498029149,
                  lng : -0.125868019708498
               },
               southwest : {
                  lat : 51.51648701970849,
                  lng : -0.128565980291502
               }
            }
         },
         types : [ subpremise ]
      },
      {
         address_components : [
            {
               long_name : WC1B 3DE,
               short_name : WC1B 3DE,
               types : [ postal_code ]
            },
            {
               long_name : Greater London,
               short_name : Gt Lon,
               types : [ administrative_area_level_2, political ]
            },
            {
               long_name : United Kingdom,
               short_name : GB,
               types : [ country, political ]
            },
            {
               long_name : London,
               short_name : London,
               types : [ postal_town ]
            }
         ],
         formatted_address : London WC1B 3DE, UK,
         geometry : {
            bounds : {
               northeast : {
                  lat : 51.52044859999999,
                  lng : -0.1257614
               },
               southwest : {
                  lat : 51.5184783,
                  lng : -0.1275254
               }
            },
            location : {
               lat : 51.5189698,
               lng : -0.1265003
            },
            location_type : APPROXIMATE,
            viewport : {
               northeast : {
                  lat : 51.5208124302915,
                  lng : -0.1252944197084979
               },
               southwest : {
                  lat : 51.5181144697085,
                  lng : -0.127992380291502
               }
            }
         },
         types : [ postal_code ]
      },
      {
         address_components : [
            {
               long_name : WC1B 3DG,
               short_name : WC1B 3DG,
               types : [ postal_code ]
            },
            {
               long_name : Greater London,
               short_name : Gt Lon,
               types : [ administrative_area_level_2, political ]
            },
            {
               long_name : United Kingdom,
               short_name : GB,
               types : [ country, political ]
            },
            {
               long_name : London,
               short_name : London,
               types : [ postal_town ]
            }
         ],
         formatted_address : London WC1B 3DG, UK,
         geometry : {
            bounds : {
               northeast : {
                  lat : 51.52044859999999,
                  lng : -0.1257614
               },
               southwest : {
                  lat : 51.5184783,
                  lng : -0.1275254
               }
            },
            location : {
               lat : 51.5189698,
               lng : -0.1265003
            },
            location_type : APPROXIMATE,
            viewport : {
               northeast : {
                  lat : 51.5208124302915,
                  lng : -0.1252944197084979
               },
               southwest : {
                  lat : 51.5181144697085,
                  lng : -0.127992380291502
               }
            }
         },
         types : [ postal_code ]
      },
      {
         address_components : [
            {
               long_name : WC1B,
               short_name : WC1B,
               types : [ postal_code_prefix, postal_code ]
            },
            {
               long_name : Greater London,
               short_name : Gt Lon,
               types : [ administrative_area_level_2, political ]
            },
            {
               long_name : United Kingdom,
               short_name : GB,
               types : [ country, political ]
            },
            {
               long_name : London,
               short_name : London,
               types : [ postal_town ]
            }
         ],

   status : OK
}

如何从字符串

中检索formatted_address的值

我尝试了以下方法,但是获得了空。

 NSData* data = [stringvalue dataUsingEncoding:NSUTF8StringEncoding];
            NSError* error;


            NSDictionary* json = [NSJSONSerialization  //getting NULL here
                                  JSONObjectWithData:data

                                  options:NSJSONReadingMutableContainers
                                  error:&error];

            //The results from Google will be an array obtained from the NSDictionary object with the key "results".
            NSArray* places = [json objectForKey:@"results"];
            for (int i=0; i<[places count]; i++)
            {
                NSDictionary* addr = [places objectAtIndex:i];
                 NSDictionary *loc = [addr objectForKey:@"formatted_address"];
                NSLog(@"loc=%@",loc);
            }
        }

1 个答案:

答案 0 :(得分:0)

NSDictionary *loc = [addr objectForKey:@"formatted_address"];

我认为,“formatted_address”的值是NSString对象而不是NSDictionary。所以请尝试这样:

NSString *loc = [addr objectForKey:@"formatted_address"];

另请注意,键和值应包含双引号。