0

私はObj-C(iOS)のJSONフレームワークを使用して、RESTful Webサービス(C#/。NET)からの応答を解析しています。

配列やオブジェクトに関してはフレームワークは問題ありませんが、サービス呼び出しの1つが文字列を返しています。

生の値(サーバーのメモリ内): 41SIdX1GRoyw1174duOrewErZpn/WatH

WCFによってエンコードされたhttp応答のJSON値: "41SIdX1GRoyw1174duOrewErZpn\/WatH"

これは、Android、Windows Phone 7、そしてもちろんjQueryの対応するJSONフレームワークによって正常に処理されます。サーバーは、.NET WebFaultExceptionを返すこともあります。これにより、エラーメッセージが自動的にシリアル化されます"Error message here"

JSONフレームワークはエラーで戻ってきます:Token 'string' not expected before outer-most array or object

Objective CでJavaScript文字列をデコードする方法を知っている人はいますか?

ありがとうクリス

4

2 に答える 2

2

使用しているJSONフレームワークは、JSON文字列の最も外側のエンティティとして値を処理できないと言っていると思います。オブジェクトまたは配列が必要です。その場合、最初の非空白文字の'['または'{'をテストし、それらのいずれでもない場合は、それが値であると想定するのは簡単なことです。

さらに簡単に言えば、入力文字列をJSONパーサーにフィードする前に、常に'['']'で囲み、データを監視する前に、外側の1要素配列を「破棄」することができます。これにより、JSONパーサーは、存在する値の形式に関係なく解析を処理できます。

于 2011-08-23T18:04:52.367 に答える
0
-(NSString*)handleResponseAsString:(NSString*)data{
if(data==nil || [data length] == 0) return nil;
NSString* retVal = nil;
SBJsonParser* parser = [[SBJsonParser alloc] init];
NSArray* items = [parser objectWithString:[NSString stringWithFormat:@"[%@]", data]]; // enclose in [] so that the parser thinks it's an array
if([parser error] == nil)
{
    if([items count] > 0) retVal = (NSString*) [items objectAtIndex:0];
    else NSLog(@"handleResponseAsString parser error: the array had zero elements");
}else{
    NSLog(@"handleResponseAsString error: '%@' could not be decoded due to error: %@", data, [parser error]);
}
[parser release];
return retVal;

}

于 2011-08-23T18:33:36.677 に答える