web-dev-qa-db-ja.com

SyntaxError:JSONの位置1の予期しないトークンo

次のようにデータを取得しているコントローラーで型クラスを使用していくつかのデータを解析します:

{  
   "data":{  
      "userList":[  
         {  
            "id":1,
            "name":"soni"
         }
      ]
   },
   "status":200,
   "config":{  
      "method":"POST",
      "transformRequest":[  
         null
      ],
      "transformResponse":[  
         null
      ],
      "url":"/home/main/module/userlist",
      "headers":{  
         "rt":"ajax",
         "Tenant":"Id:null",
         "Access-Handler":"Authorization:null",
         "Accept":"application/json, text/plain, */*"
      }
   },
   "statusText":"OK"
}

このようなデータを保存しようとしました

var userData = _data;
var newData = JSON.parse(userData).data.userList;

ユーザーリストを新しい変数に抽出するにはどうすればよいですか?

44
Soniya Mohan

投稿したJSONは問題なく見えますが、コードでは、JSON文字列ではなく、すでにJavaScriptオブジェクトである可能性があります。つまり、これ以上解析する必要はありません。

これを自分でテストできます。 Chromeのコンソールで:

new Object().toString()
// "[object Object]"

JSON.parse(new Object())
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse("[object Object]")
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse()は、入力を文字列に変換します。 JavaScriptオブジェクトのtoString()メソッドは、デフォルトで[object Object]を返し、その結果、動作が観察されます。

代わりに次を試してください:

var newData = userData.data.userList;
61
Timo

関数JSON.parseの最初のパラメーターは文字列であり、データはJavaScriptオブジェクトであるため、文字列[object object]に変換されます。データを渡す前にJSON.stringifyを使用する必要があります

JSON.parse(JSON.stringify(userData))
15
huruji

JSON.parseのすぐ上で、次を使用します。

var newData = JSON.stringify(userData)
15
Sukhchain

JSON.parseブロックでラップせずにtry-catchを使用しないでください。

// payload 
let userData = null;

try {
    userDate = JSON.parse(payload); 
} catch (e) {
    // You can read e for more info
    // Let's assume the error is that we already have parsed the payload
    // So just return that
    userData = payload;
}

// Now userData is the parsed result
11
Kousha

さて、私はこのようなオブジェクトを解析する必要があることを意味しました:var jsonObj = {"first name" : "fname"}。しかし、実際にはそうではありません。すでにJSONであるためです。

2
М.Б.

JSONデータまたは文字列が解析されたときに予期しない「O」エラーがスローされます。

文字列の場合、すでに文字列化されています。解析は予期しない「O」エラーで終了します。

似たような状況に直面しましたが(コンテキストは異なりますが)、JSON Producerを削除することで次のエラーを解決しました。

    @POST
    @Produces({ **MediaType.APPLICATION_JSON**})
    public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
      return Response.status(200).entity("OK").build();

  }

応答には"OK"文字列が返されます。 @ Produces({** MediaType.APPLICATION_JSON})**としてマークされた注釈は、文字列をJSON形式に解析しようとし、結果としてUnexpected 'O'

削除@ Produces({MediaType.APPLICATION_JSON})は正常に動作します。出力:OK

注意:また、クライアント側では、ajaxリクエストを作成してJSON.parse( "OK")を使用すると、予期しないトークン 'O'がスローされます

Oは、文字列の最初の文字です

JSON.parse(object)はjQuery.parseJSON(object)と比較します;

JSON.parse( '{"name": "Yergalem"、 "city": "Dover"}'); - - 正常に動作します

0
Yergalem