1

JSON arrayサーバーから次の形式の を受信して​​います。

{ messageArray: 
   [ { msgFrom: 'V351315826',
       msgDate: Tue Oct 29 2013 04:00:35 GMT+0000 (UTC),
       msgBody: 'Hi?',
       channelID: 'V351315826' },
     { msgFrom: 'V351315826',
       msgDate: Tue Oct 29 2013 04:00:38 GMT+0000 (UTC),
       msgBody: 'Hello!',
       channelID: 'V351315826' } ] }

どうすればループできますか?

これまでに得られたものは次のとおりです。

NSError* error;
NSDictionary *JSON =
[NSJSONSerialization JSONObjectWithData: [(NSString *) message dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers
                                  error: &error];
NSArray *messageArray = [JSON objectForKey:@"messageArray"];

// Parse and loop through the JSON
for (NSDictionary * dataDict in messageArray) {
    NSString * messageID = [dataDict objectForKey:@"id"];
    NSString * msgFrom = [dataDict objectForKey:@"msgFrom"];
    NSString * msgTime = [dataDict objectForKey:@"msgDate"];

    NSLog(@"FROM ---> %@", dataDict);

}
4

1 に答える 1

5

エラー ポインターを受け取るメソッドを使用する場合は、非 ARC コード (ARC では冗長) にを設定NSErrorし、戻り値をチェックして、返されたを調べることをお勧めします。nilnilNSError

NSError* error = nil;
NSDictionary *JSON =
[NSJSONSerialization JSONObjectWithData: [(NSString *) message dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers
                                  error: &error];

if (!JSON)
{
    NSLog(@"%@", [error localizedDescription]);
}
else
{
    NSArray *messageArray = [JSON objectForKey:@"messageArray"];

    // Parse and loop through the JSON
    for (NSDictionary * dataDict in messageArray) {
        NSString * messageID = [dataDict objectForKey:@"id"];
        NSString * msgFrom = [dataDict objectForKey:@"msgFrom"];
        NSString * msgTime = [dataDict objectForKey:@"msgDate"];

        NSLog(@"FROM ---> %@", dataDict);
    }
}

提供された JSON でこれを実行すると、これがコンソールに出力されます。

2013-10-28 22:28:20.552 SO question[12141:907] The operation couldn’t be completed. (Cocoa error 3840.)

これNSJSONSerializationを解析するのに苦労しているようです。私自身、JSON にはあまり詳しくありません。JSON バリデーターを介して JSON を実行するとどうなるか見てみましょう( Web 上の多くのバリデーターの 1 つ、http://jsonlint.comに JSON を貼り付けます)。これを行うと、いくつかの構文エラーが発生します。キーは二重引用符で囲む必要があり、文字列も二重引用符で囲む必要があるようです。2 つの辞書のすべての値が文字列であると仮定します。構文を整理すると、JSON は次のようになります。

{
    "messageArray": [
        {
            "msgFrom": "V351315826",
            "msgDate": "TueOct29201304: 00: 35GMT+0000(UTC)",
            "msgBody": "Hi?",
            "channelID": "V351315826"
        },
        {
            "msgFrom": "V351315826",
            "msgDate": "TueOct29201304: 00: 38GMT+0000(UTC)",
            "msgBody": "Hello!",
            "channelID": "V351315826"
        }
    ]
}

コードを実行すると、次のように出力されます。

2013-10-28 22:36:02.018 SO question[12188:907] FROM ---> {
    channelID = V351315826;
    msgBody = "Hi?";
    msgDate = "TueOct29201304: 00: 35GMT+0000(UTC)";
    msgFrom = V351315826;
}
2013-10-28 22:36:02.018 SO question[12188:907] FROM ---> {
    channelID = V351315826;
    msgBody = "Hello!";
    msgDate = "TueOct29201304: 00: 38GMT+0000(UTC)";
    msgFrom = V351315826;
}

うまくいけば、それは役に立ちます!

于 2013-10-29T03:38:21.630 に答える