0

JSON ファイルを返す API を呼び出しています。API リンクは次のとおりです: http://sg.media-imdb.com/suggests/h/hello.json

問題は、この JSON ファイルに JSON 応答をラップするものが含まれていることです。

imdb$hello(JSON)

したがって、私が見ることができる最善のアプローチは、正規表現を使用して必要なものだけを抽出することです。次のようなもの: ~/\((.*)\)/.

ただし、(私の知る限り) NSData のみを入力として受け入れる新しい JSON iOS5 API を使用したいと思います。したがって、応答を NSData から NSString に変換したり、正規表現を使用して解析したり、別の NSData オブジェクトに入れたりしたくありません。

そのJSON解析のためのより良い/よりクリーンなソリューションを見ることができますか?

4

4 に答える 4

2

あなたが持っているのは JSON ではなく、JSONPです。JavaScript を使用していない場合は、おっしゃる通り、前処理してから解析するのが正しい処理方法だと思います。

于 2012-06-22T01:22:01.983 に答える
1
         NSError *jsonError = nil;
         NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
         NSRange range = [jsonString rangeOfString:@"("];
         range.location++;
         range.length = [jsonString length] - range.location - 1;
         jsonString = [jsonString substringWithRange:range ];
         NSJSONSerialization *jsonResponse =
         [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]
                                         options:0
                                           error:&jsonError];
于 2013-06-25T17:44:12.447 に答える
0

JSON を解析する前に、このようなことをしてみませんか?

response = [response stringByReplacingOccurrencesOfString:@"imdb$hello" withString:@""];
于 2012-06-22T01:40:05.977 に答える
-1

この文字列の規則性。それは常にそこにあるでしょうか?

// Remove @"imdb$hello(" and @")" that wraps the response string.
NSRange JSONRange = NSMakeRange(11, [responseString length] - 12);
NSString *JSONString = [responseString substringWithRange:JSONRange];

// Now you can parse as normal…

ラッパーを剥がす方法は、自分のレベルで確実に作成する必要があります。

于 2012-06-22T02:07:07.243 に答える