4

私はにあり、NSString "[{"van" : 1,312, "vuan":12,123}]すべてのキーについてこの値を取得するために、これを行っています:

    NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding];
    jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err];

    self.van = [NSMutableArray arrayWithCapacity:1];
    self.vuan = [NSMutableArray arrayWithCapacity:1];

    for (NSDictionary *json in jsonArray) {
        NSString * value = [json objectForKey:@"van"];
        [self.van addObject:value];
        lbl1.text = value;

        NSString * value1 = [json objectForKey:@"vuan"];
        [self.vuan addObject:value1];
        lbl4.text = value1;
    }

NSData配列を使用する必要はなく、代わりにで直接変換する必要があるかもしれませんNSDictionary

とにかく、私は上で書いた値が含まれていますjsonArraynil、なぜであるかわかりません。jsonResponse1

編集:私の上司はjson文字列を間違って書いています。提案ありがとうございます!:)

4

2 に答える 2

13

JSON が無効です。修理する。このサイトはあなたの友達です。

http://jsonlint.com/

于 2013-03-07T07:49:13.183 に答える
1

より防御的にコーディングする必要があり、エラーが見つかったら報告する必要があります。

まず、JSON 解析が失敗したかどうかを確認し、失敗した場合はエラーを報告します。

 NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding];
jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err];
if (jsonArray == nil)
{
    NSLog(@"Failed to parse JSON: %@", [err localizedDescription]);
    return;
}

第二に、これらのキーが JSON にない場合objectForKey:は返さnilれ、それを配列に追加しようとすると、例外がスローされます。これは避けたいことです。

for (NSDictionary *json in jsonArray) {
    NSString * value = [json objectForKey:@"van"];
    if (value != nil)
    {
        [self.van addObject:value];
        lbl1.text = value;
    }
    else
    {
         NSLog(@"No 'van' key in JSON");
    }

    NSString * value1 = [json objectForKey:@"vuan"];
    if (value1 != nil)
    {
        [self.vuan addObject:value1];
        lbl4.text = value1;
    }
    else
    {
        NSLog(@"No 'vuan' key in JSON");
    }
}

要約すると、実行時エラーが発生するため、それらを確実に処理する必要があります。問題が発生した場合は、診断して修正できるように、できるだけ多くの情報を報告する必要があります。

于 2013-03-07T07:50:52.013 に答える