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 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何从 NSArray iOS PUT JSON 格式数据

JSON 解析:NSArray POST

iOS:到 NSArray 的 JSON 字符串未按预期工作

从存储在 NSDictionary 中的 JSON DATA 将应用程序名称存储在 NSArray 中

返回的 JSON 数据从 NSDictionary 变为 NSArray

iOS NSArray转化为Json