4
      "Cost to Implement \nRate 5 to 1\nHigh = 5\nLow = 1" 

JSON の一部として、jsonlint では問題なく解析されますが、Chrome ではこれらのアプローチのいずれかで失敗します (それぞれ個別に試行されます)。

sections = $.parseJSON(myJSONstr);

sections = JSON.parse(myJSONstr);

sections = eval('(' + myJSONstr + ')');

JSON の文字列から「=」記号を削除すると、すべて問題ありません。ユーザーは、入力するテキストに = 記号を入力できる必要があります。これを回避する方法はありますか?

4

1 に答える 1

6

エスケープせずに改行を入力しているようです。バックスラッシュをエスケープする必要があります。

JSONに生の改行を入力しているため、次は失敗します。エスケープする必要があります

var obj = JSON.parse('{"prop": "Cost to Implement \nRate 5 to 1\nHigh = 5\nLow = 1"}');

バックスラッシュをエスケープする

// Works fine
var obj = JSON.parse('{"prop": "Cost to Implement \\nRate 5 to 1\\nHigh = 5\\nLow = 1"}');

JSON オブジェクトを正しくシリアル化すると、これらの新しい行 (およびタブ、バックスペースなどのエスケープが必要なその他の文字) が自動的にエスケープされることに注意してください。例えば

// Correctly parses the new line
JSON.parse(JSON.stringify({prop: "Line1\nLine2\tAfterTab"})) 
于 2012-11-19T17:47:43.563 に答える