2

nsdataクラスから値を取得しようとしていますが、機能しません。

これが私のJSONデータです。

{
    "count": 3,
    "item": [{
        "id": "1",
        "latitude": "37.556811",
        "longitude": "126.922015",
        "imgUrl": "http://175.211.62.15/sample_res/1.jpg",
        "found": false
    }, {
        "id": "3",
        "latitude": "37.556203",
        "longitude": "126.922629",
        "imgUrl": "http://175.211.62.15/sample_res/3.jpg",
        "found": false
    }, {
        "id": "2",
        "latitude": "37.556985",
        "longitude": "126.92286",
        "imgUrl": "http://175.211.62.15/sample_res/2.jpg",
        "found": false
    }]
}

これが私のコードです

-(NSDictionary *)getDataFromItemList
{

    NSData *dataBody = [[NSData alloc] initWithBytes:buffer length:sizeof(buffer)]; 
    NSDictionary *iTem = [[NSDictionary alloc]init];
    iTem = [NSJSONSerialization JSONObjectWithData:dataBody options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"id = %@",[iTem objectForKey:@"id"]);

    //for Test
    output = [[NSString alloc] initWithBytes:buffer length:rangeHeader.length encoding:NSUTF8StringEncoding];
    NSLog(@"%@",output);
    return iTem;

}

JSONのすべての値にアクセスするにはどうすればよいですか?私を助けてください。

4

5 に答える 5

4

こんな風に見える ..

NSString *jsonString = @"your json";
NSData *JSONdata = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *jsonError = nil;
if (JSONdata != nil) {
    //this you need to know json root is NSDictionary or NSArray , you smaple is NSDictionary
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:JSONdata options:0 error:&jsonError];
    if (jsonError == nil) {
        //every need check value is null or not , json null like ( "count": null )
        if (dic == (NSDictionary *)[NSNull null]) {
            return nil;
        }

        //every property you must know , what type is

        if ([dic objectForKey:@"count"] != [NSNull null]) {
            [self setCount:[[dic objectForKey:@"count"] integerValue]];
        }
        if ([dic objectForKey:@"item"] != [NSNull null]) {
            NSArray *itemArray = [dic objectForKey:@"item"]; // check null if need
            for (NSDictionary *itemDic in itemArray){
                NSString *_id = [dic objectForKey:@"id"]; // check null if need
                NSNumber *found = (NSNumber *)[dic objectForKey:@"found"];
                //.....
                //.... just Dictionary get key value
            }

        }
    }
}
于 2012-06-21T09:31:20.873 に答える
1

私はフレームワークを使用してそれを行いました:http ://stig.github.com/json-framework/

それは非常に強力で、信じられないほどのことをすることができます!

ここでは、HTTPリクエストからアイテム名を抽出するためにそれをどのように使用しますか:(結果はJSO文字列です)

NSString *result = request.responseString;

jsonArray = (NSArray*)[result JSONValue]; /* Convert the response into an array */

NSDictionary *jsonDict = [jsonArray objectAtIndex:0];

/* grabs information and display them in the labels*/
name = [jsonDict objectForKey:@"wine_name"];

これがお役に立てば幸いです

于 2012-06-21T09:12:58.773 に答える
1

JSONを見ると、オブジェクト階層内の適切なオブジェクトをクエリしていません。正しく抽出した最上位のオブジェクトはですNSDictionary。items配列と単一のアイテムを取得するには、これを行う必要があります。

NSArray *items = [iTem objectForKey:@"item"];
NSArray *filteredArray = [items filteredArrayUsingPredicate:
   [NSPredicate predicateWithFormat:@"id = %d", 2];
if (filteredArray.count) NSDictionary *item2 = [filteredArray objectAtIndex:0];
于 2012-06-21T09:16:07.537 に答える
1

これにはJSONKitを試してください。使い方は非常に簡単です。

于 2012-06-23T05:27:35.807 に答える
0

これがまだ関連している場合は注意してください。ただし、iOS 5では、AppleはJSONの適切なサポートを追加しました。小さなチュートリアルについては、このブログをチェックしてください 。JSONフレームワークをインポートする必要はありません。(この回答が関連する場合は+1)

于 2012-07-05T19:26:41.870 に答える