2017-09-25 14 views
0

JSON文字列に二重引用符を使用して\"をエスケープすると、パーサーは失敗します。しかし、JSON.stringifyを使用すると、何とか文字列を正しくエスケープすることができます。JSON文字列で二重引用符がサポートされていますか?

二重引用符を正しくエスケープしていないと思われます。より詳細なコードを見てください。

var data = { 
 
    "singleQuoteHtml": "<span class='qwer'>content</span>", 
 
    "doubleQuoteHtml": "<span class=\"qwer\">content</span>", 
 
    "singleQuote": "'hi'", 
 
    "doubleQuote": "\"hi\"" 
 
}; 
 

 
var dataString = '{"singleQuoteHtml": "<span class=\'qwer\'>content</span>",' 
 
    + '"doubleQuoteHtml": "<span class=\"qwer\">content</span>",' 
 
    + '"singleQuote": "\'hi\'",' 
 
    + '"doubleQuote": "\"hi\"' 
 
    + '}'; 
 

 

 

 
function Parse() 
 
{ 
 
    //Stringify is capable of creating single quotes and double quotes 
 
    console.log(JSON.parse(JSON.stringify(data))); 
 
    
 
    //When I escape double quotes myself the parser fails 
 
    //Uncomment to see failure 
 
    //console.log(JSON.parse(dataString)); 
 
}
<button onclick="Parse();">Parse JSON </button>

+1

なぜ文字列連結を使用して 'dataString'を作成したいのですか?通常のJavaScriptオブジェクトを作成し、 'JSON.stringify()'を使用して 'dataString'を作成しないと、エスケープで発生する可能性のある多くの問題を解決できません。 –

+0

実際のコードはJavaベースです。私にとって利用可能になっているデータは、Javaオブジェクトではなく、単純な古い文字列です。だから私はどのようにこれらの制約をJavaで文字列化するのか分からない。しかし、あなたは正しいかもしれません。おそらく、頭痛の程度が分かれば、頭痛は少なくなるでしょう。 –

+0

Javaでは、 'TestClass'に' String'プロパティを追加し、 'String jsonRawString = objectMapper.writeValueAsString(testObject)'で 'TestClass'を逆シリアル化することで、手動で文字列をエスケープする必要を避けることができます –

答えて

4

'... "\"hi\""...'文字列リテラルは、バックスラッシュなしで、""hi""に評価されます。

バックスラッシュは、文字列リテラルによってエスケープシーケンスとして呑み込まれます。

文字列に実際のバックスラッシュを挿入するには、バックスラッシュを\\としてエスケープする必要があります。

関連する問題