在解析 google 位置响应时遇到困难
Facing difficulty in parsing google location response
使用 iOS 8.0.
我正在使用 Google API
获取 location.and 我想使用 NSPredicate 和 KeyPath 减少编码。
我在下面使用 link 来获取 google 响应,
iPhone - Get City name from Latitude and Longtiude
使用用户@'Constantin Saulenco'.
的回答
如果我是 Sql 开发人员,我会编写这样的查询,
1. (select address_components from MAIN_TABLE where types like 'postal_code') from this I will get NAME_TABLE rows.
2.select long_name from NAME_TABLE where types like 'locality'
为此我使用了下面的代码,在看了 @ztan 的回答后我把编码改成了这样
编辑:回答
NSArray *addressArray = json[@"results"];
NSPredicate *predicateForTypes=[NSPredicate predicateWithFormat:@"(types CONTAINS 'postal_code')"];
addressArray=([addressArray filteredArrayUsingPredicate:predicateForTypes][0])[@"address_components"];
NSPredicate *predicateForCity=[NSPredicate predicateWithFormat:@"(types CONTAINS 'locality')"];
NSString *cityName=([addressArray filteredArrayUsingPredicate:predicateForCity][0])[@"long_name"];
我有以下JSON...
{
"address_components" = (
{
"long_name" = 221;
"short_name" = 221;
types = (
"street_number"
);
},
{
"long_name" = "Juniper Drive";
"short_name" = "Juniper Dr";
types = (
route
);
},
{
"long_name" = "North Kingstown";
"short_name" = "North Kingstown";
types = (
locality,
political
);
},
{
"long_name" = "Washington County";
"short_name" = "Washington County";
types = (
"administrative_area_level_2",
political
);
},
{
"long_name" = "Rhode Island";
"short_name" = RI;
types = (
"administrative_area_level_1",
political
);
},
{
"long_name" = "United States";
"short_name" = US;
types = (
country,
political
);
},
{
"long_name" = 02852;
"short_name" = 02852;
types = (
"postal_code"
);
},
{
"long_name" = 4308;
"short_name" = 4308;
types = (
"postal_code_suffix"
);
}
);
"formatted_address" = "221 Juniper Drive, North Kingstown, RI 02852, USA";
geometry = {
location = {
lat = "41.577761";
lng = "-71.468383";
};
"location_type" = ROOFTOP;
viewport = {
northeast = {
lat = "41.5791099802915";
lng = "-71.46703401970849";
};
southwest = {
lat = "41.5764120197085";
lng = "-71.4697319802915";
};
};
};
"place_id" = ChIJ563yzFex5YkRujoi28Fvzvo;
types = (
"street_address"
);
},
{
"address_components" = (
{
"long_name" = "North Kingstown";
"short_name" = "North Kingstown";
types = (
locality,
political
);
},
{
"long_name" = "Washington County";
"short_name" = "Washington County";
types = (
"administrative_area_level_2",
political
);
},
{
"long_name" = "Rhode Island";
"short_name" = RI;
types = (
"administrative_area_level_1",
political
);
},
{
"long_name" = "United States";
"short_name" = US;
types = (
country,
political
);
}
);
"formatted_address" = "North Kingstown, RI, USA";
geometry = {
bounds = {
northeast = {
lat = "41.6549521";
lng = "-71.4023083";
};
southwest = {
lat = "41.497126";
lng = "-71.52244109999999";
};
};
location = {
lat = "41.5568315";
lng = "-71.4536835";
};
"location_type" = APPROXIMATE;
viewport = {
northeast = {
lat = "41.6549521";
lng = "-71.4023083";
};
southwest = {
lat = "41.497126";
lng = "-71.52244109999999";
};
};
};
"place_id" = "ChIJgWUP-V-x5YkRO7Zie7NXWsI";
types = (
locality,
political
);
},2nd JSON Object, 3rd JSON Object ,......,....
我的问题是如何减少编码?使用 NSPRedicates 和 KeyPath ..
这就是我们如何解决问题......我在@ztan的回答中提到了这一点,请看一下,这将是有益的。
请看我的第二条评论......:)
试试这个
NSArray *filtered = [YOURARRAY filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"(types == %@)", @"locality "]];
您可以执行以下操作:
NSArray *addressArray = resultDict[@"results"];
NSPredicate *predicateFromTypes=[NSPredicate predicateWithFormat:@"(types CONTAINS 'postal_code') AND (types CONTAINS 'locality')"];
NSLog(@"\n%@", [addressArray[0][@"address_components"] filteredArrayUsingPredicate:predicateFromTypes][0][@"long_name"]);
使用 iOS 8.0.
我正在使用 Google API
获取 location.and 我想使用 NSPredicate 和 KeyPath 减少编码。
我在下面使用 link 来获取 google 响应, iPhone - Get City name from Latitude and Longtiude 使用用户@'Constantin Saulenco'.
的回答如果我是 Sql 开发人员,我会编写这样的查询,
1. (select address_components from MAIN_TABLE where types like 'postal_code') from this I will get NAME_TABLE rows.
2.select long_name from NAME_TABLE where types like 'locality'
为此我使用了下面的代码,在看了 @ztan 的回答后我把编码改成了这样
编辑:回答
NSArray *addressArray = json[@"results"];
NSPredicate *predicateForTypes=[NSPredicate predicateWithFormat:@"(types CONTAINS 'postal_code')"];
addressArray=([addressArray filteredArrayUsingPredicate:predicateForTypes][0])[@"address_components"];
NSPredicate *predicateForCity=[NSPredicate predicateWithFormat:@"(types CONTAINS 'locality')"];
NSString *cityName=([addressArray filteredArrayUsingPredicate:predicateForCity][0])[@"long_name"];
我有以下JSON...
{
"address_components" = (
{
"long_name" = 221;
"short_name" = 221;
types = (
"street_number"
);
},
{
"long_name" = "Juniper Drive";
"short_name" = "Juniper Dr";
types = (
route
);
},
{
"long_name" = "North Kingstown";
"short_name" = "North Kingstown";
types = (
locality,
political
);
},
{
"long_name" = "Washington County";
"short_name" = "Washington County";
types = (
"administrative_area_level_2",
political
);
},
{
"long_name" = "Rhode Island";
"short_name" = RI;
types = (
"administrative_area_level_1",
political
);
},
{
"long_name" = "United States";
"short_name" = US;
types = (
country,
political
);
},
{
"long_name" = 02852;
"short_name" = 02852;
types = (
"postal_code"
);
},
{
"long_name" = 4308;
"short_name" = 4308;
types = (
"postal_code_suffix"
);
}
);
"formatted_address" = "221 Juniper Drive, North Kingstown, RI 02852, USA";
geometry = {
location = {
lat = "41.577761";
lng = "-71.468383";
};
"location_type" = ROOFTOP;
viewport = {
northeast = {
lat = "41.5791099802915";
lng = "-71.46703401970849";
};
southwest = {
lat = "41.5764120197085";
lng = "-71.4697319802915";
};
};
};
"place_id" = ChIJ563yzFex5YkRujoi28Fvzvo;
types = (
"street_address"
);
},
{
"address_components" = (
{
"long_name" = "North Kingstown";
"short_name" = "North Kingstown";
types = (
locality,
political
);
},
{
"long_name" = "Washington County";
"short_name" = "Washington County";
types = (
"administrative_area_level_2",
political
);
},
{
"long_name" = "Rhode Island";
"short_name" = RI;
types = (
"administrative_area_level_1",
political
);
},
{
"long_name" = "United States";
"short_name" = US;
types = (
country,
political
);
}
);
"formatted_address" = "North Kingstown, RI, USA";
geometry = {
bounds = {
northeast = {
lat = "41.6549521";
lng = "-71.4023083";
};
southwest = {
lat = "41.497126";
lng = "-71.52244109999999";
};
};
location = {
lat = "41.5568315";
lng = "-71.4536835";
};
"location_type" = APPROXIMATE;
viewport = {
northeast = {
lat = "41.6549521";
lng = "-71.4023083";
};
southwest = {
lat = "41.497126";
lng = "-71.52244109999999";
};
};
};
"place_id" = "ChIJgWUP-V-x5YkRO7Zie7NXWsI";
types = (
locality,
political
);
},2nd JSON Object, 3rd JSON Object ,......,....
我的问题是如何减少编码?使用 NSPRedicates 和 KeyPath ..
请看我的第二条评论......:)
试试这个
NSArray *filtered = [YOURARRAY filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"(types == %@)", @"locality "]];
您可以执行以下操作:
NSArray *addressArray = resultDict[@"results"];
NSPredicate *predicateFromTypes=[NSPredicate predicateWithFormat:@"(types CONTAINS 'postal_code') AND (types CONTAINS 'locality')"];
NSLog(@"\n%@", [addressArray[0][@"address_components"] filteredArrayUsingPredicate:predicateFromTypes][0][@"long_name"]);