web-dev-qa-db-ja.com

iOSで辞書から値を取得する方法

iOSは初めてです。ログインページを作成しましたが、すべて正常に機能します。ユーザー名とパスワードを確認するために[〜#〜] json [〜#〜]を使用し、サーバーからdictionary形式で応答を得ました。 dictionaryから値を抽出して、プログラムでチェックしたい。サーバーから受け取る応答は次のとおりです。

json: {
        error = 0;
        msg = "";
        value = {
                  user = false;
                };
      };

まず、キーerrorの値が0または1。次に、キーuserで値を確認します。それをチェックするためにどのようにコーディングすればよいかわかりません。誰か助けてもらえますか?

私が試したコードは以下です:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *respString = [[NSString alloc] initWithData:loginJSONData encoding:NSUTF8StringEncoding];

    SBJsonParser *objSBJSONParser = [[SBJsonParser alloc] init];

    NSDictionary *json = [[NSDictionary alloc] initWithDictionary:[objSBJsonParser objectWithString:respString]];

    NSLog(@"json: %@",json);

    NSString *error = [json objectForKey:@"error"];

    NSLog(@"error: %@", error);

    if ([error isEqualToString:@"o"])
    {
        NSLog(@"login successful");
    }
    else
    {
        NSLog(@"login fail");
    }
}
12
Saba Sayed

最新のObjective-Cを使用すると、配列や辞書にあるものへのアクセスが簡単になります。

次の構文を使用する必要があります。

id<NSObject> value = dictionary[@"key"];

同様に、

id<NSObject> value = array[1]; // 1 is the index

上記を質問に適用する:

NSString *error = json[@"error"];

NSDictionary *value = json[@"value"];

BOOL user = [json[@"value"][@"user"] boolValue];

上記の行のように、ネストは許可されていますが、それは良い方法ではありません。

16
cream-corn
NSNumber *error = [json objectForKey:@"error"];
if ([error intValue] == 0)
{
    NSLog(@"login successful");

    NSDictionary *value = [json objectForKey:@"value"];
    NSNumber *user = [value objectForKey:@"user"];
    if ([user boolValue])
    {
        NSLog(@"user == true");
    }
    else
    {
        NSLog(@"user == false");
    }
}
else
{
    NSLog(@"login failed");
}
4

通常サーバーから返される辞書は、キーと値のペアになります。キーに対応するこれらの値にアクセスするために探しているなら、これらのコードはあなたを助けるかもしれません

NSString *varname = [[NSString alloc]initWithFormat:@"%@",[dictionaryname objectForKey:@"key"]];
2
SARATH SASI

JSON辞書からget error値を取得します。

NSString *error = [myJSONDicName objectForKey:@"error"];

JSON辞書からget ser値を取得します。

NSString *error = [[myJSONDicName objectForKey:@"value"] objectForKey:@"user"];

編集:

あなただけを変える必要があります

if ([error isEqualToString:@"o"])
                            _^_
                             |

変化する 'o'から'0'

1
iPatel

以下のコードを使用できます

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
   {
          NSString *respstring = [[NSString alloc]initWithData:loginJsonData encoding:NSUTF8StringEncoding];
          NSDictionary *dic = [responseString JSONValue];
         NSLog(@"%@",dic);
         NSNumber *error = [dic objectForKey:@"error"];
        if([error intValue] == 0)  {
           NSLog(@"login successful");
        }
        else
        {
            NSLog(@"login fail");
        }

        NSString *user = [value objectForKey:@"user"];
        BOOL userStatus = [user boolValue];
 }
0
manujmv