web-dev-qa-db-ja.com

NSURLConnection:JSONテキストが配列またはオブジェクトで開始されず、フラグメントが設定されないようにするオプション

NSURLConnection connectionDidFinishLoadingから次のエラーが表示されます

「操作を完了できませんでした。(ココアエラー3840。)」(JSONテキストは配列またはオブジェクトで開始せず、フラグメントを設定できないオプションがあります。)UserInfo = 0x7b71dbb0 {NSDebugDescription = JSONテキストは配列またはオブジェクトで開始しませんでした。設定されていないフラグメントを許可するオプション。}

私は次のコードを使用しました:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    NSError *error;
    id json = [NSJSONSerialization JSONObjectWithData:_urlData options:kNilOptions error:&error];

    if (error) {
        NSLog(@"Loading Error = %@",error);
    }
}

以下は私のjson応答です:

{  
   "result":"success",
   "details":[  
      {  
         "id":"11531",
         "user_name":"",
         "fullname":"aa",
         "email_address":"aa",
         "user_type":"a",
         "server":"",
         "server_email":"",
         "server_password":"",
         "password":"0cc175b9c0f1b6a831c399e269772661",
         "clean_password":"a",
         "gender":"",
         "ceo_name":"",
         "ceo_picture":"",
         "ceo_contact":"",
         "ceo_contact_pic":"",
         "company_name":"a",
         "freight_company_name":"",
         "freight_company_email":"",
         "company_url":"11531",
         "company_keyword":"",
         "company_description":"",
         "address":"",
         "province":"",
         "postal_code":"",
         "phone_number":"",
         "fax_number":"",
         "website":"",
         "city":"",
         "b_category":"",
         "main_products":"",
         "cellphone":"a",
         "country":"0",
         "states":"",
         "company_status":"1",
         "joindate":"0",
         "varificationcode":"",
         "activation_status":"1",
         "new_email":"",
         "email_activation_status":"",
         "facebook_url":"",
         "Twitter_url":"",
         "company_update_status":"0",
         "last_access_date":"0000-00-00",
         "ip_address":"",
         "ip_block":"0",
         "user_id":null,
         "company_id":null,
         "video_url":"",
         "oauth_uid":"",
         "oauth_provider":"",
         "get_color":"",
         "comp_name_size":"13",
         "member_type":"",
         "mark_status":"1",
         "ip_address_intension":"",
         "fbId":"",
         "twitterId":"",
         "profile_picture":"",
         "device_token":""
      }
   ]
}

私はstackOverflowですべてのソリューションを試しましたが、静脈で。

21
NITHIN S

オプション値をNSJSONReadingAllowFragmentsではなくkNilOptionsに設定しますJSONをローカルファイルで取得してテストしました

id json = [NSJSONSerialization JSONObjectWithData:contentOfLocalFile
                                                options:NSJSONReadingAllowFragments
                                                  error:&deserializingError];
26
Janmenjaya

NSLogは文字列ではなく、取得している実際のデータを記録し、最初のバイトを確認します。 JSONSerializerは最初の文字として{または[を見つけられなかったので、おそらくいくつかのゼロバイト、バイトオーダーマーク、またはそのような他の不可視文字があります。

1
gnasher729

ジャンメンジャヤの答えに加えて、私は追加したいと思います-

さまざまなAPIでこの問題に2回直面しました。私が持っていたたびに問題があった

  1. 初めて受け取った応答が正しい形式ではありませんでした。形式は常に「[」または「{」で始まる必要があることに注意してください。そのため、バックエンドから修正されました。
  2. 次に、ex http://www.xyz/video123.com でWordの「ビデオ」を含むURLをヒットしようとしていました。名前のビデオに関連するWebサイトがオフィスでブロックされました。したがって、使用しているネットワークにそのような制限がないことを確認してください。 Postmanは正しい応答を表示しますが、デバイスまたはシミュレーターでは問題に直面します。

これらのケースも確認してください。

0
Kunal Gupta