JSON.parseの予期しない文字エラー


112

私はこのエラーを受け取ります:

JSON.parse:予期しない文字

私がfirebugでこのステートメントを実行すると:

JSON.parse({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false});

なぜそうなのですか?JSON文字列は私には正しいようですが、JSHintを使用してテストしました。上記の場合に渡されるオブジェクトは、コンテンツタイプが次のように設定されたサーバー応答です。application/json

回答:


224

あなたは文字列を解析するのではなく、すでに解析されたオブジェクトを解析します:)

var obj1 = JSON.parse('{"creditBalance":0,...,"starStatus":false}');
//                    ^                                          ^
//                    if you want to parse, the input should be a string 

var obj2 = {"creditBalance":0,...,"starStatus":false};
// or just use it directly.

最初の文に賛成票を投じたいのですが、なぜ再解析しますか?
Mathletics 2011

1
@MarcelKorpel、数学:そうです。更新しました。
kennytm

@MathleticsすべてのアカウントでJSON.parseはセキュリティチェックを行います。NT
BF 14

5
それは陽気です。大好きです。<3
ダース・エグリアス

1
data.resultsで未定義になります(データはJSONオブジェクトです)。スタックは、data = JSON.parse(data)によってjsオブジェクトにするように指示しています。しかし、JSON.parseの予期しない文字エラーが発生します。
KasparTr 2016

35

問題のオブジェクトが文字列化されていることを確認してから、単純にを使用して、それを解析関数に渡すことができます JSON.stringify()

以下の行を更新しました、

JSON.parse(JSON.stringify({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false}));

または、JSONをいくつかの変数に格納している場合:

JSON.parse(JSON.stringify(yourJSONobject));

3
JSON.stringifyがボスです。
Kenmeister

-1

OPには当てはまりませんが、このエラーは文字列に'ダブル(")ではなくシングルクォーテーションマーク()を使用すると発生する可能性があります。

JSONの仕様では、文字列の二重引用符が必要です。

例えば:

JSON.parse(`{"myparam": 'myString'}`)

エラーを与えるが、

JSON.parse(`{"myparam": "myString"}`)

ではない。前後の引用符に注意してくださいmyString

関連:https : //stackoverflow.com/a/14355724/1461850

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.