2

いくつかのフォーラムを読みましたが、この単純なタスクを達成できないようです。PHPスクリプトを指し、結果を以下のNSStringとして保存するXcodeのビューがあります。

[{"id":"16","名前":"ボブ","年齢":"37"}]

この NSString の解析に問題があります。これは、NSString の内容を取得する方法です。

NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/json.php?
id=%@",userId];

// to execute php code
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

// to receive the returend value
NSString *strResult = [[NSString alloc] initWithData:dataURL 
encoding:NSUTF8StringEncoding];

結果 (strResult) を JSON に変換し、そこからオブジェクトを取り出すにはどうすればよいですか? 以下のようなものだと思いますが、何かが足りないことはわかっています

NSString *name = [objectForKey:@"name"];
NSString *age = [objectForKey:@"age"];

どんな助けでも素晴らしいでしょう。ありがとうございました!

4

3 に答える 3

13

それを読むためにクラスNSJSONSerializationを使用してください

id jsonData = [string dataUsingEncoding:NSUTF8StringEncoding]; //if input is NSString
id readJsonDictOrArrayDependingOnJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];

あなたの場合

NSArray *readJsonArray = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:nil];
NSDictionary *element1 = readJsonArray[0]; //old style: [readJsonArray objectAtIndex:0]
NSString *name = element1[@"name"]; //old style [element1 objectForKey:@"name"]
NSString *age = element1[@"age"]; //old style [element1 objectForKey:@"age"]
于 2012-12-01T23:59:56.273 に答える
3

これを試して....

NSString * strResult = [[NSString alloc] initWithData:responseMutableData encoding:NSUTF8StringEncoding];  
SBJSON *jsonParser = [[SBJSON alloc]init];
if([[jsonParser objectWithString:strResult] isKindOfClass:[NSArray class]])
{
    NSArray *jsonArr=[jsonParser objectWithString: strResult];
    NSDictionary *firstDictonary = [jsonArr objectAtIndex:0];
    NSString *name = [firstDictonary valueForKey:@"name"];
    NSString *age = [firstDictonary valueForKey:@"age"];
}
于 2012-12-03T07:18:21.037 に答える
0

iOS 5以降をターゲットにしている場合は、NSJSONSerializationを使用してください

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html

iOS 5より下位をターゲットにしている場合は、次のようなJSONパーサーを使用してください:http ://stig.github.com/json-framework/

そして、JSON文字列でJSONValue(または同等の)メソッドを呼び出すだけです。

NSDictionary *dict= [strResult JSONValue];

NSString *name = [dict objectForKey:@"name"];
NSString *age = [dict objectForKey:@"age"];

ちなみに、JSON文字列は配列のように見え、objectForKeyからオブジェクトを取得するために使用することはできませんNSArray。JSON文字列応答を辞書として変更するか、objectAtIndexオブジェクトを取得するために使用するかの2つのオプションがあります。

于 2012-12-01T23:55:24.710 に答える