2015-12-25 65 views
-1
a = "{key:'14',data:{order: '154'}}" 

JSON.parse(a) 

预期的行为:JSON.parse不会解析JSON

{key:'14',data:{order: '154'}} 

结果:

SyntaxError: unexpected tIDENTIFIER, expecting end-of-input 
+9

这是无效的JSON(虽然它将是有效的JavaScript)。这些键需要双引号,而且这些值也用双引号,而不是单引号。验证它在http://jsonlint.com/ –

+0

@ michael如果值是数字,它可以没有引号 – loneshark99

+1

@ loneshark99但在任何情况下都不是单引号有效.. – user2864740

回答

4

您的JSON是无效的。

你应该尝试:

a = '{"key":"14","data":{"order": "154"}}' 

JSON.parse(a) 

有效的JSON既需要属性和值在双引号括起来。

+1

击败我吧!谷歌这样的在线验证器:http://codebeautify.org/jsonvalidate,它可能会有所帮助。 – user1269942

+1

属性和*字符串*值。 'null','true','false'和数字不应该被引用(除非你想要一个带有这些内容的字符串)。 – Amadan

0

无效的Json,Json键总是在引号中以使其有效。

0

它不是JSON。你的散列存储为string而不是JSON。所以你需要eval的预期输出:

> a = "{key:'14',data:{order: '154'}}" 
> eval(a) 
#=> {:key=>"14", :data=>{:order=>"154"}} 

让我看看你的哈希值转换成JSON和您展示它的外观以及如何解析JSON。

# sample of your hash 
> hash = {key:'14',data:{order: '154'}} 

# convert hash to json and assign it to a 
> a = hash.to_json 
#=> "{\"key\":\"14\",\"data\":{\"order\":\"154\"}}" 

# parse correct JSON format 
> JSON.parse(a) 
#=> {"key"=>"14", "data"=>{"order"=>"154"}}