3

私は、JSON フレームワークと ASIHTTPRequest for iOS を使用して JSON を解析する方法を学んでいます。コミュニティ チュートリアルを通じて、Twitter フィードとカスタム フィードを使用してテストしました。すべて順調です。

次に、Microsoft Odata Service for Northwind db を使用してテストしようと考えました。ここで json の結果を表示できます。

http://jsonviewer.stack.hu/#http://services.odata.org/Northwind/Northwind.svc/Products%281%29?$format=json

今、私は製品名だけを解析する方法を見つけるのに苦労しています. 誰かが私を正しい方向に向けることができますか?

私の requestFinished で、私はこれを持っています:

- (void)requestFinished:(ASIHTTPRequest *)request
{    
    [MBProgressHUD hideHUDForView:self.view animated:YES];
    NSString *responseString = [request responseString];
    NSDictionary *responseDict = [responseString JSONValue];

    //find key in dictionary
    NSArray *keys = [responseDict allKeys];

    NSString *productName = [responseDict valueForKey:@"ProductName"];
    NSLog(@"%@",productName);
}

ログにはnullがあります。

valueforKeyを に変更する@"d"と、ペイロード全体を取得できますが、必要なのは productName だけです。

私が使用しているサービスの URL は次のとおりです。

http://servers.odata.org/Northwind/Northwind.svc/Products(1)?$format=json

4

1 に答える 1

3

提供したリンクによると、JSON の形式は次のとおりです。

{
  "d": {
    ...
    "ProductName": "Chai",
    ...
  }
}

最上位には、キーが 1 つだけあります: "d". これを行う場合:

NSString *productName = [responseDict valueForKey:@"ProductName"];

戻りnilます。階層をさらに深くする必要があります。

NSDictionary *d = [responseDict valueForKey:@"d"];
NSString *productName = [d valueForKey:@"ProductName"];

または単に:

NSString *productName = [responseDict valueForKeyPath:@"d.ProductName"];
于 2011-08-07T16:36:53.440 に答える