1

iOSプロジェクトでswiftyJSONを使用していますが、有効なJSONでデータを取得するのに問題があります...

whoJson:

[
  {
    "name": "[{\"code\":\"en\",\"name\":\"John\"},{\"code\":\"fr\",\"name\":\"Jacques\"}]",
    "id": 1
  },
  {
    "name": "[{\"code\":\"en\",\"name\":\"Bob\"},{\"code\":\"fr\",\"name\":\"Robert\"}]",
    "id": 11
  }
]

このコードで:

println(who[0]["name"])

結果は次のとおりです。

[{"code":"en","name":"John"},{"code":"fr","name":"Jacques"}]

John または Jacques の値を取得するにはどうすればよいですか? 私はこれを試しましたが、うまくいきません...

println(who[0]["name"][0]["name"])
4

1 に答える 1

1

の値name自体が JSON 文字列です。

文字列をインスタンスに変換しNSDataます (正しい文字列エンコーディングを使用しますNSUTF8StringEncoding。ほとんどの場合に一般的に機能するため、ここでは例としてのみ使用します)。

スウィフト
var name : NSString = who[0]["name"] as! NSString
var nameAsData : NSData? = name.dataUsingEncoding(NSUTF8StringEncoding)
目的 C:
NSString *name = who[0][@"name"];
NSData *nameAsData = [name dataUsingEncoding:NSUTF8StringEncoding];

次に、これを使用してそのデータを JSON オブジェクト (この場合は配列) に変換します。

迅速:
var error : NSError?
var names : NSArray = NSJSONSerialization.JSONObjectWithData(nameAsData!, options: nil, error: &error) as! NSArray;
if (error != nil) {
    NSLog("Error reading JSON: %@", error!.localizedDescription)
}
目的 C:
NSError *__autoreleasing error;
NSArray *names = [NSJSONSerialization JSONObjectWithData:nameAsData options:kNilOptions error:&error];
if (error) {
    NSLog(@"Error reading JSON: %@", error.localizedDescription);
}

したがって、JSON の解析中にエラーが発生しなかった場合を除き、はオブジェクトのnameAsDatanamesある必要があります。次に、それを使って好きなことを行うことができます。たとえば、「John」または「Jacques」を取得するには、次のようにします。NSArrayNSDictionary

迅速:
NSLog("first name: %@", names[0]["name"] as! NSString) // John
NSLog("second name: %@", names[1]["name"] as! NSString) // Jacques
目的 C:
NSLog(@"first name: %@", names[0][@"name"]); // John
NSLog(@"second name: %@", names[1][@"name"]); // Jacques
于 2015-05-24T03:40:09.370 に答える