2016-03-16 12 views
20

私はJSONに文字列(文字列)の上に解析することができますどのように文字列文字列を一重引用符でJSONとして解析しますか?

str = "{'a':1}"; 
JSON.parse(str); 
VM514:1 Uncaught SyntaxError: Unexpected token '(…) 

がありますか?これは単純な解析のようです。それは何とか働いていない。

+3

シングル引用符が正しくJSONをフォーマットされていないので、あなたがそのような何かを受信して​​いる場合、あなたはおそらく、あなたがすべき – aup

+0

それを解析しようとする前に、「str.replace()を使用して、単一のqoutesを交換する必要があるだろうとにかく常にjavascriptの文字列にシングルクォートを使うようにしてください。 'var str ="悪い例 ";'良い例ではありません、次のようにしてください: 'var str = '良い例';' => JSONの問題がありますが、HTMLにも問題はありません:)。 – ReeCube

+1

@ReeCube JSONについては、どうしても文字列で作成するのはなぜですか? JSONをオブジェクト以外のものから最後に構築したときに実際には思い出しません。 –

答えて

4

JSONでは単一引用符をキーとして使用できません。二重引用符を使用する必要があります。あなたのユースケースについては

おそらくこれが最も簡単な解決策のようになります。プロパティは、二重引用符を使用する必要があり、引用符が必要な場合

str = '{"a":1}'; 

Source。 のプロパティ名はすべて二重引用符で囲む必要があります。

21

JSON standardは二重引用符を必要とし、一重引用符は受け入れません。また、パーサーも受け付けません。

文字列にエスケープされた単一引用符を使用しないシンプルなケース(通常は不可能ですが、これはJSONではありません)の場合は、単純にstr.replace(/'/g, '"')とすると有効なJSONになります。このような

+3

'str.repl ace( '\' '、' "')これは、最初のオカレンスのみを置き換えます。 –

+0

これは正しいです、ありがとう@ssube –

2

何か:

var div = document.getElementById("result"); 
 

 
var str = "{'a':1}"; 
 
    str = str.replace(/\'/g, '"'); 
 
    var parsed = JSON.parse(str); 
 
    console.log(parsed); 
 
    div.innerText = parsed.a;
<div id="result"></div>

0

あなたのJSONがあなたのコントロール(ユーザ入力)の下で安全にあることを確認しているなら、あなたは、単にJSONを評価することができます。 Evalは引用符で囲まれていないプロパティ名と同様にすべての引用符型を受け付けます。

var str = "{'a':1}"; 
var myObject = eval('(' + str + ')'); 

evalパーサーの仕組みによって余分な括弧が必要です。 あなたがコントロールしているデータでEvalを使用すると、Evalは悪くない。 JSON.parseとのeval()の違いの詳細について は、私はそれが古いポストを知っているJSON.parse vs. eval()

0

を参照してください、しかし、あなたは、この目的のためにJSON5を使用することができます。

<script src="json5.js"></script> 
<script>JSON.stringify(JSON5.parse('{a:1}'))</script> 
関連する問題