0

私は特定のjsonを持っています:

[
    {
        "id"        : 42422422,
        "created"   : 1329684013,
        "name"          : "Test"
    },
    {
        "id"        : 42422423,
        "created"   : 1329684015,
        "name"          : "Test 123"
    },
        {
          ...
        }
]

これは問題なく解析できましたが、Webサーバーにエラーがあると、次のJSONが返されます。

{
    "error" : {
        "code"      : "511",
        "message"   : "JSON error",
        "extra" : {
            "some"      : "text",
            "someextra" : "text"
        }
    }
}

私はこれを使ってみました:

if ([jsonArray valueForKey:@"error"] != nil) {

しかし、それは機能しません。なぜなら、その値を出力すると、それは「null」の配列だからです。

どうすればこれを確認できますか?(私は使用できることを知ってNSRangeいますが、もっと良い方法が必要だと思いますか?

私は次のようにJSONを解析します:

NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error: &e]; 

responseDataは、NSURLConnectionのconnectionDidFinishLoadingメソッドから取得されます。

4

5 に答える 5

7

最初に、結果が配列か辞書かを確認する必要があります。

if ([jsonArray isKindOfClass:[NSArray class]]) {
     //process results
} else if ([jsonArray isKindOfClass:[NSDictionary class]]) {
    NSDictionary *errorInfo = [(NSDictionary *)jsonArray objectForKey:@"error"];
    //handle error...
}
于 2012-11-23T07:49:27.433 に答える
2

以下のリンクを確認して、Jsonを解析してください。

Nextbelt のデモを入手する

JSON フレームワークをダウンロード

 NSString *appurl =[NSString stringWithFormat:@"your link"];
 appurl = [appurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:appurl]];
 NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];
 NSString  *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
 NSMutableDictionary *deletdict=[returnString JSONValue];
 if([[deletdict objectForKey:@"success"] isEqualToString:@"False"])
    {
        NSLog(@"Unsuccess...");

    }
 else
    {
        NSLog(@"success...");
    }

AND投稿方法はこちら

NSString *post =[NSString stringWithFormat:@"AgencyId=STM&UserId=1&Type=1&Date=%@&Time=%@&Coords=%@&Image=h32979`7~U@)01123737373773&SeverityLevel=2",strDateLocal,strDateTime,dict];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://google/places"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];

NSMutableArray *SubLiveArray=[str JSONValue];
于 2013-11-22T05:43:10.253 に答える
0

エラーのない JSON ペイロードではトップレベルの配列 (最初の [ で示されます) がありますが、エラーの JSON ペイロードではそうではありません。

{
    "error" : {
        "code"      : "511",
        "message"   : "JSON error",
        "extra" : {
            "some"      : "text",
            "someextra" : "text"
        }
    }
}

エラー コードはネストされたディクショナリ オブジェクトであるため、次を使用して解析します。

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

NSString *errorCode = [NSString stringWithFormat:@"%@",[(NSDictionary*)[json objectForKey:@"error"]objectForKey:@"code"]];
于 2012-11-23T08:21:06.940 に答える
0
-(void)SerchpageApicall
{
    NSString *main_url=@"yourlink";
    NSString *appurl=[NSString stringWithFormat:@"%@&address=%@",main_url,_txt_Search_address.text];

    appurl = [appurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url=[NSURL URLWithString:appurl];
    NSURLRequest* requestVersion = [NSURLRequest requestWithURL:url
                                                    cachePolicy:NSURLRequestReloadIgnoringCacheData
                                                timeoutInterval:5.0];
    NSHTTPURLResponse* response = nil;
    NSError* error = nil;
    NSData *returnData = [NSURLConnection sendSynchronousRequest:requestVersion returningResponse:&response error:&error ];
    NSString  *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
    NSMutableDictionary *dict=[returnString JSONValue];
}
于 2014-12-11T07:17:00.590 に答える
-2

[jsonArray objectForKey:@"error"]の代わりに使用valueForKey

于 2012-11-23T07:44:52.553 に答える