0

私はJSON ParsingiOSで呼ばれるものに非常に慣れていません。誰かが私にデータを最初から解析する方法を説明できますか?基本的に私が伝えたいのは、ある場所の天気を取得するためにYahooWeatherAPIを使用しているということです。http://weather.yahooapis.com/forecastjson?w=2502265私が使用しているリンクは何ですか。それからデータを解析するにはどうすればよいですか?これを行うとエラーが発生します。誰かがそれを修正したり、その方法を教えてもらえますか?

NSString * address = @"http://weather.yahooapis.com/forecastjson?w=2502265";
NSString * request = [NSString stringWithFormat:@"%@",address];
NSURL * URL = [NSURL URLWithString:request];
NSString* JSON = [NSString stringWithContentsOfURL:URL encoding:NSUTF8StringEncoding error:&error];
NSError *e = nil;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:JSON options:NSJSONReadingMutableContainers error:&e];
         NSLog(@"%@", json);
4

1 に答える 1

2

AFNetworking のおかげで生活がずっと楽になりました。

私は通常、POSTパラメーターを渡すなど、これ以上のことを行いますが、これはあなたの場合に役立ちます:

NSURL *url = [NSURL URLWithString:@"http://weather.yahooapis.com/forecastjson?w=2502265"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    // PARSE YOUR JSON DICTIONARY HERE
    [self parseResult:JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"Failed to get data from web service, error: %@", [error localizedDescription]);
}];

[operation start];



// method to parse web service JSON
-(void)parseResult:(id)jsonDictionary
{
    // parse result here
    NSLog(@"Title = %@", [jsonDictionary valueForKey:@"title"];
}

それが役立つことを願っています。

あなたのためのいくつかの基本的な情報

あなたがしているのは、Web サービスからの情報を要求することです。

特定の POST または GET パラメーターをリッスンするサーバー上のスクリプトのような Web サービスを考えることができます。

次のような Web サービスがあるとします。

http://www.mywebservice.com/rest/datatype=User?name=JohnSmith&age=20

「datatype」、「name」、および「age」は、Web サービスが期待するパラメーターであることに注意してください。Web サービスにリクエストを送信するときは、通常、これらのパラメーターに値 (この場合は "User"、"JohnSmith"、および "20" が値です) を渡します。

最近では、Web サービスは通常、JSON または XML の形式でデータを返します。

JSON はこれらすべての XML フォーマットを行う必要はありません。その結果、JSON はデータを返すためのより好ましい選択肢になる傾向があります。

返される JSON データは次のようになります。

{
    users = {(
        ({
           name = John Smith;
           age = 20;
           address = 123 Easy Street EARTH
        }),
        ({
           name = Bob Brown;
           age = 35;
           address = 456 Some Road EARTH
        })
    )};
}

上記は最初は少し怖いかもしれませんが、一度対処すると、これらは通常、配列内にネストされた辞書であり、巨大な辞書内にネストされていることがわかります。

上記の場合と同様に、返される JSON データは、すべてのユーザーを含む単一の巨大な辞書です。次のようなことをすると:

[JSON objectForKey:@"users"]

「users」配列を取得します。

    users = {(
        ({
           name = John Smith;
           age = 20;
           address = 123 Easy Street EARTH
        }),
        ({
           name = Bob Brown;
           age = 35;
           address = 456 Some Road EARTH
        })
    )};

次に、「users」配列から特定のユーザーを取得したい場合、たとえば Bob Brown の場合は、次のようにします。

[[JSON objectForKey:@"users"] objectAtIndex:1]

そして、それはあなたを返します:

{
   name = Bob Brown;
   age = 35;
   address = 456 Some Road EARTH
}

最後に、名前などのユーザーのプロパティを取得するには、次のようにします。

[[[JSON objectForKey:@"users"] objectAtIndex:1] valueForKey:@"name"];

例えば:

NSLog(@"User name = %@", [[[JSON objectForKey:@"users"] objectAtIndex:1] valueForKey:@"name"]);

実際の Web サービス ディクショナリは通常、適切にフォーマットされているわけではありません。通常、もう少し複雑です。特に Drupal のような CMS では (実行!!!) :D

于 2012-08-30T08:22:13.273 に答える