-3

次の JSON データがあります。

(
    3,
        {
        body = "123";
        date = 1333023644;
        mid = 12;
        "read_state" = 0;
    },
        {
        body = ":)";
        date = 1332968570;
        mid = 4;
        "read_state" = 1;
    },
        {
        body = "1234";
        date = 1331844024;
        mid = 1;
        "read_state" = 1;
    }
)

そして、このコードでボディ値の配列を取得したい:

NSArray *array = [dialogsDictionary objectForKey:@"body"];

しかし、私はいつもこのエラーを受け取ります:

*キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[__NSArrayM objectForKey:]: 認識されないセレクターがインスタンス 0x6b65a60 に送信されました'

4

3 に答える 3

1

この JSON 文字列を検討してください。

  {
   "arrayOfData": [
    {
        "body": "123",
        "date": 1333023644,
        "mid": 12,
        "read_state": 0
    },
    {
        "body": ": )",
        "date": 1332968570,
        "mid": 4,
        "read_state": 1
    },
    {
        "body": "1234",
        "date": 1331844024,
        "mid": 1,
        "read_state": 1
    }
    ]
  }

これは有効な JSON 文字列です。http://jsonlint.com/を使用して有効性を確認できます。

jsonDataNSData 型の変数に JSON データがあるとします。SBJSONを使用すると、JSON を次のように解析できます。

  NSDictionary *jsonDictionary = [jsonData JSONValue];

  NSArray *array = [jsonDictionary objectForKey:@"arrayOfData"];

  NSMutableArray *result = [[NSMutableArray alloc]init];
  for(NSDictionary *dict in array){
      [result addObject:[dict objectForKey:@"body"]];
  }

この操作の後、キーのすべての値bodyが結果配列になります。

「3」が配列カウントの場合、その値を次のように JSON に含めた可能性があります。

{
"numberOfElementsInArray": 3,
"arrayOfData": [
    {
        "body": "123",
        "date": 1333023644,
        "mid": 12,
        "read_state": 0
    },
    {
        "body": ": )",
        "date": 1332968570,
        "mid": 4,
        "read_state": 1
    },
    {
        "body": "1234",
        "date": 1331844024,
        "mid": 1,
        "read_state": 1
    }
]
}

JSON に関するこのチュートリアルを参照してください。JSON を理解するには、このWeb サイトを読んでおく必要があります

ホットリックスによって追加されました

理解できないのは、元の JSON が本質的に次のようなものだったことです。

[
    3,
    {
        "body": "123",
        "date": 1333023644,
        "mid": 12,
        "read_state": 0
    },
    {
        "body": ": )",
        "date": 1332968570,
        "mid": 4,
        "read_state": 1
    },
    {
        "body": "1234",
        "date": 1331844024,
        "mid": 1,
        "read_state": 1
    }
]

元の JSON ソースではなく、NSLog オブジェクトのダンプであるため、形式が異なります。完全に正当な JSON。

于 2012-03-30T16:29:52.583 に答える
-1

指定した JSON は無効です。

   (

    {
    body = "123";
    date = 1333023644;
    mid = 12;
    "read_state" = 0;
},
    {
    body = ":)";
    date = 1332968570;
    mid = 4;
    "read_state" = 1;
},
    {
    body = "1234";
    date = 1331844024;
    mid = 1;
    "read_state" = 1;
}
)

JSON データが上記のような場合、次のように記述する必要があります。

 for(NSDictionary *dict in Array){
  [result addObject:[dict objectForKey:@"body"]];
 }

「配列」 resultには、「本体」オブジェクトに対応する辞書オブジェクトが含まれます

于 2012-03-29T17:00:50.280 に答える