使用单引号将字符串解析为JSON?

时间:2016-03-16 14:23:07

标签: javascript json

我有一个字符串

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

如何解析字符串(str)以上的JSON?这看起来像一个简单的解析;它不能以某种方式工作。

7 个答案:

答案 0 :(得分:52)

JSON standard需要双引号,不接受单引号,解析器也不接受。

如果你的字符串中没有转义单引号(这通常是不可能的,但这不是JSON),你可以简单str.replace(/'/g, '"'),你应该得到有效的JSON。< / p>

答案 1 :(得分:9)

我知道这是一篇旧帖子,但您可以将JSON5用于此目的。

<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>

答案 2 :(得分:5)

这样的事情:

&#13;
&#13;
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;
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

答案 3 :(得分:4)

var str =  "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);

这为我解决了问题。

答案 4 :(得分:3)

JSON中不允许使用单引号作为键。你需要使用双引号。

对于您的用例,这可能是最简单的解决方案:

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

Source

  

如果属性需要引号,则必须使用双引号。所有   属性名称必须用双引号括起来。

答案 5 :(得分:3)

如果您确定您的JSON安全在您的控制之下(而不是用户输入),那么您可以简单地评估JSON。 Eval接受所有报价类型以及不带引号的属性名称。

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

由于eval解析器的工作原理,需要额外的括号。 当Eval用于您可以控制的数据时,它并不邪恶。 有关JSON.parse和eval()之间差异的更多信息,请参阅JSON.parse vs. eval()

答案 6 :(得分:-4)

json = ( new Function("return " + jsonString) )(); 
相关问题