0
var jsn=getAttr(ref,"json-data").toString();
console.log(jsn); //{test: true,stringtest:"hallo"}. it's OK.
JSON.parse(jsn); //Uncaught SyntaxError: Unexpected token s, line: line with JSON.parse;

私はJSON.parseこのデータで何かが正しくないと思います..削除しようとしましたstringtest:"hallo"-結果はありません... PS:また、私は何か間違ったことをしていると思いますので、この質問をしました

初めてみJSON.parse("{"+jsn+"}");ました。

4

1 に答える 1

2

オブジェクト キーを引用符で囲む必要があるため、JSON が適切にフォーマットされていません。以下が機能します。

var jsn = '{"test": true, "stringtest": "hallo"}';
JSON.parse(jsn);

編集: JSON 形式を指定する RFC4627 には、次のように記載されています。

2.2. オブジェクト


オブジェクト構造は、 0 個以上の名前と値のペア(またはメンバー) を囲む中かっこのペアとして表されます。名前は
文字列
です。各名前の後にコロンを 1 つ付けて、名前
と値を区切ります。単一のコンマは、値とそれに続く
名前を区切ります。オブジェクト内の名前は一意である必要があります。

  object = begin-object [ member *( value-separator member ) ]
  end-object

  member = string name-separator value

ご覧のとおり、JSON オブジェクトは名前と値のペアで構成されており、名前は文字列です。繰り返しますが、RFC は次のように述べています。

文字列の表現は、プログラミング言語の C ファミリーで使用される規則に似ています。 文字列は引用符で始まり、
引用符
で終わります。すべての Unicode 文字は、エスケープする必要がある 文字 (引用符、逆ソリッド、および制御文字 (U+0000 から U+001F))
を除いて、引用符で囲むことができます。

文字列 = 引用符 *char 引用符

引用符 = %x22 ; "

したがって、RFC によると、キーは一重引用符ではなく二重引用符で囲む必要があります。それでも、一部のパーサーはより寛容で両方を受け入れる可能性があると思いますが、私は標準に固執します。

于 2012-05-04T22:33:36.360 に答える