JSON 到 NSArray 格式
Posted
技术标签:
【中文标题】JSON 到 NSArray 格式【英文标题】:JSON to NSArray formatting 【发布时间】:2014-05-18 18:55:16 【问题描述】:我正在尝试从 JSON 文件中获取包含一系列国家/地区的数组。我在网上找到了以下格式的 2 个 JSON 文件。我可以加载到 NSDictionary,我的问题是如何提取和格式化。这些没有提取密钥。我猜我需要一个 for 循环,但不知道该怎么做。
[
name: 'Afghanistan', code: 'AF',
name: 'Ã…land Islands', code: 'AX',
name: 'Albania', code: 'AL',
和
[
"name": "Afghanistan",
"nativeName": "\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646",
"tld": [".af"],
"cca2": "AF",
"ccn3": "004",
"cca3": "AFG",
"currency": ["AFN"],
"callingCode": ["93"],
"capital": "Kabul",
"altSpellings": ["AF", "Af\u0121\u0101nist\u0101n"],
"relevance": "0",
"region": "Asia",
"subregion": "Southern Asia",
"language": ["Pashto", "Dari"],
"languageCodes": ["ps", "uz", "tk"],
"translations":
"cy": "Affganistan",
"de": "Afghanistan",
"es": "Afganist\u00e1n",
"fr": "Afghanistan",
"it": "Afghanistan",
"ja": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3",
"nl": "Afghanistan",
"hr": "Afganistan"
,
"latlng": [33, 65],
"demonym": "Afghan",
"borders": ["IRN", "PAK", "TKM", "UZB", "TJK", "CHN"],
"area": 652230
,
"name": "\u00c5land Islands",
"nativeName": "\u00c5land",
"tld": [".ax"],
"cca2": "AX",
"ccn3": "248",
我提取字典的代码(来自第一个 json 文件)
+ (NSDictionary *)getCountryList
NSURL *myURL = [[NSURL alloc]initWithString:@"http://www.osmi-tech.com/iphone/json/countriessimp.json"];
NSData *myData = [[NSData alloc]initWithContentsOfURL:myURL];
NSError *error = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:&error];
return json;
【问题讨论】:
最顶层的json是一个数组,你确定可以把它加到字典里吗? :// 将NSDictionary *json = ..
更改为 NSArray *json = ..
,以匹配实际的 JSON,然后从那里开始工作。你知道如何索引一个数组,对吧?
How to use NSJSONSerialization的可能重复
【参考方案1】:
-您在给定代码 sn-p 中使用的链接中的数据不是有效的 JSON,因此 NSJSONSerialization 将无法解析。
-数据是 JSON Array 的格式,所以解析它会返回一个 NSArray 而不是 NSDictionary。 我已经用正确的链接修改了你的代码 sn-p,希望它会有所帮助:
+ (NSArray *)getCountryList
NSURL *myURL = [[NSURL alloc]initWithString:@"http://www.osmi-tech.com/iphone/json/countries.json"];
NSData *myData = [[NSData alloc]initWithContentsOfURL:myURL];
NSError *error = nil;
NSArray *json = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:&error];
return json;
【讨论】:
【参考方案2】:谢谢拉吉夫。我将国家列表提取到 NSArray 中的最终代码。
+ (NSArray *)getCountryList
NSURL *myURL = [[NSURL alloc]initWithString:@"http://www.osmi-tech.com/iphone/json/countries.json"];
NSData *myData = [[NSData alloc]initWithContentsOfURL:myURL];
NSError *error = nil;
NSArray *json = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:&error];
NSArray *countryList = [json valueforkey:@"name"];
return countryList;
【讨论】:
如果答案有帮助,您应该接受它作为可接受的答案..:)以上是关于JSON 到 NSArray 格式的主要内容,如果未能解决你的问题,请参考以下文章
iOS:到 NSArray 的 JSON 字符串未按预期工作
从存储在 NSDictionary 中的 JSON DATA 将应用程序名称存储在 NSArray 中