0

応答:

{
        "AT": null,
        "EMs": [
            {
                "EC": null,
                "LM": null,
                "SCs": 0,
                "SM": "Username or Password is invalid."
            }
        ],
        "OS": 1,
        "PWD": "3456",
        "UId": 399,
        "UN": "bb",
        "COM": "Apple",
        "DId": 0,
        "DN": "iPhone",
        "DOS": "iOS",
        "EA": "aa@gmail.com",
        "FN": "bb",
        "IsCon": true,
        "IsSuc": false,
        "SD": "bb",
        "SLT": "XU0QpDVC",
        "STs": 0,
        "UQId": "1d3346c",
        "US": 2,
        "Ver": "6.0"
    }

ここでは、「ユーザー名またはパスワードが無効です」などの SM タグ値を取得します。

私はこのコードを試しました

NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

NSString *SMString = [json objectForKey:@"SM"];
NSString *OSString = [json objectForKey:@"OS"];
NSString *DIdString = [json objectForKey:@"DId"];
NSString *UIdString = [json objectForKey:@"UId"];
4

8 に答える 8

2

これが機能することを期待します:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData
                                                     options:kNilOptions
                                                       error:&error];
NSArray *EMsArray = [json objectForKey:@"EMs"];
NSAssert([EMsArray count] > 0, @"Expected at least one element in EMs array");
NSString *SMString = [[EMsArray objectAtIndex:0] objectForKey:@"SM"];
于 2013-05-20T12:01:17.820 に答える
1

興味のあるデータは辞書内の配列にあるため、次のようにする必要があります。

NSArray *EMsArray = [json objectForKey:@"EMs"];

for (NSDictionary *EMsDictionary in EMsArray) {
    NSString *SMString = [EMsArray objectForKey:@"SM"];

    // do something with SMString
}
于 2013-05-20T12:03:28.913 に答える
0

このようにしてみて、

    NSArray *EMsArray = [json objectForKey:@"EMs"];
    if([EMsArray count]>0)
         NSString *SMString = [[EMsArray objectAtIndex:0] objectForKey:@"SM"];
于 2013-05-20T12:02:48.737 に答える
0

あなたのjsonでわかるように、タグ「EMs」の配列が含まれています。

したがって、最初にjsonから配列を抽出する必要があり、その配列のinde 0で辞書を取得する必要があります。その後、簡単に使用できます

objectForkey 

nsdictionary のプロパティを取得し、必要なメッセージをフェッチします。

SBJSON *json = [SBJSON new];

NSError *error = [[NSError alloc] init];

 NSString *jsonString = [json objectWithString:"your json string" error:&error];

NSArray *array = [[NSArray alloc]initWithArray:[jsonString valueForKeyPath:@"EMs"]];

if([array count]>0)
{
    NSDictionary *_dic = [array objectAtIndex:0];
    NSLog(@"%@",[_dic objectForKey:@"SM"]);
}

json ライブラリはhttps://github.com/fbsamples/ios-friend-smash/tree/master/friendsmash_complete/friendSmasher/Classesを参照

于 2013-05-20T12:14:02.190 に答える
0

最も簡単でエレガントな解決策は、次のようにキーパスを使用することです。

NSString *SMString = [json valueForKeyPath:@"EMs.SM"];

サンプルコードを参照してください:

NSString *SMString = [dict valueForKeyPath:@"EMs.SM"];
NSLog(@"Value of key EMs -> SM: %@", SMString);

出力:

Value of key EMs -> SM: (
  "Username or Password is invalid."
)
于 2013-05-20T12:18:26.100 に答える
0

次のコードはあなたを助けるかもしれません

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

NSMutableArray *EmsArray=[json objectForKey:@"EMs"];
NSMutableDictionary *dataDic=[EMsArray objectAtIndex:0];
NSString *smString=[dataDic objectForKey:@"SM"];

オブジェクトを 1 つだけ取得するたびに、応答配列でそれを想定しています。

于 2013-05-20T12:31:19.450 に答える
0

これを試して:

NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

NSArray *EMs = [json objectForKey:@"EMs"];
NSDictionary *dict = [EMS objectAtIndex:0];
NSString *str = [dict objectForKey:@"SM"];

NSLog(@"%@",str);
于 2013-05-20T12:07:48.687 に答える