12

以下の JSON データをデコードしたいと考えています。

{
    "content":
    [   
        {
            "1":"a",
            "2":"b",
            "3":"c",
            "4":"d",
            "mark":"yes"
        }
    ]
}

NSArray または NSDictionary に入れるかどうかわからない

コメント歓迎

4

5 に答える 5

33

どのiOSバージョンを使用していますか? iOS 5NSJSONSerializationでは、JSON データを解析するためのクラスがあります。古い iOS または MAC OSX をターゲットにする必要がある場合は、SBJSON. 投稿される文字列は、1 つの辞書を持つ配列を持つ NSDictionary になります。キーを使用してアレイにアクセスできます@"content"

コード内:

NSString * jsonString = @"blblblblblb";
NSStringEncoding  encoding;
NSData * jsonData = [jsonString dataUsingEncoding:encoding];
NSError * error=nil;
NSDictionary * parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];

SWIFT 2.0 では:

    let jsonString = "blblblblblb"
    let encoding = NSUTF8StringEncoding
    let jsonData = jsonString.dataUsingEncoding(encoding)
    guard let jData = jsonData else {return}
    do {
        let parsedData = try NSJSONSerialization.JSONObjectWithData(jData, options: [])
    } catch let error {
        print("json error: \(error)")
    }

[更新] このNSJSONSerializationクラスは 10.7 でも利用できます。私のコメントは正しくありませんでした。

于 2012-04-12T10:25:31.490 に答える
3

その特定の文字列は NSDictionary にデコードされます。これは、最も外側のものは、これまでに見たすべての JSON 実装の NSDictionary にマップされる JSON オブジェクトであるためです。任意の文字列を処理したい場合は、返されるものをテストする必要があります

NSError *jsonError;
id parsedThing = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if (parsedThing == nil)
{
    // error
}
else if ([parsedThing isKindOfClass: [NSArray class]])
{
    // handle array, parsedThing can be cast as an NSArray safely
}
else
{
    // handle dictionary, parsedThing can be cast as an NSDictionary
    // NB only dictionaries and arrays allowed as long as NSJSONReadingAllowFragments 
    // not specified in the options
}
于 2012-04-12T10:42:22.780 に答える
1

stringWithContentsOfFile:encoding:で非推奨ですiOS<6

為にiOS 6+

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"contents" ofType:@"json"];
NSError * error=nil;
NSString *jsonString = [NSString stringWithContentsOfFile:filePath encoding:nil error:&error];
NSData * jsonData = [jsonString dataUsingEncoding:nil];
NSArray * parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];

contents.jsonファイルはバンドルにあります。

于 2013-09-10T09:57:18.237 に答える
0

次のことができます。

NSData *data = ...; //JSON data
NSError *jsonError = nil;
[NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];

5 つのオブジェクトを含む単一NSDictionaryの を含むが返されます。NSArrayNSDictionaryNSString

于 2012-04-12T10:25:21.833 に答える