1

ASP.NET Web サービスから返された JSON 文字列を解析しようとしています。戻り文字列は次のように単純化されています。

<anyType d1p1:type="q1:string">[{"Firstname":"Johnny"}]</anyType>

次のコードを xcode で実行すると、「Error Domain=NSCocoaErrorDomainCode=3840」...「JSON テキストが配列またはオブジェクトで開始されておらず、フラグメントを許可するオプションが設定されていません」というエラーが表示されます。

NSURL *url = [NSURL URLWithString:@"http://webserver.com/Service.asmx/GetNames"];
    NSData *data = [NSData dataWithContentsOfURL:url];
      if(data != nil)
        {
            NSError *error = nil;
            id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
                if(error == nil)
        {
            NSLog(@"%@", result);
        }else{
            NSLog(@"%@",error);
        }
    }else{
        NSLog(@"it's nil");
    }

ここで何をすべきか本当にわかりませんか?エラーは「id result =」行にあるようです。

*reutrn 文字列の形式かもしれないと思っていましたが、ASP.NET の投稿で読んだものはすべてこれが正しいと言っています。

※「NSJSONReadingMutableContainers」を「NSJSONReadingMutableLeves」に変更しました

4

2 に答える 2

6

Web サービスは、ドキュメントのコンテンツ内でその文字列の<anyType d1p1:type="q1:string">との部分を実際に返していますか? </anyType>もしそうなら、それが問題です: 有効な JSON 文字列は単純です:

[{"Firstname":"Johnny"}]

これは、Web 応答に含める必要がある唯一のコンテンツです。角かっこで囲まれたものはすべて、実際には JSON データではなく、パーサーを無効にしています。

于 2012-02-21T20:47:57.097 に答える
2

これがうまくいくことを願って試してみてください

if ([operation isKindOfClass:[AFJSONRequestOperation class]] && [operation respondsToSelector:@selector(setJSONReadingOptions:)]) {
    ((AFJSONRequestOperation *)operation).JSONReadingOptions = NSJSONReadingAllowFragments;
}
[httpClient enqueueHTTPRequestOperation:operation];
于 2013-03-06T05:48:23.567 に答える