给予
var test = '{key1: "val1", data:{ key2: "val2", key3: "val3" }}' => returned by third party library
expectedOutput = {key1: "val1", data:{ key2: "val2", key3: "val3" }}
我尝试了JSON.parse(test)=>抛出错误 我尝试了JSON.parse(JSON.stringify(test))=>返回字符串双重解析结果错误。
我想念什么?
如何通过解析获取JSON而不是字符串?
答案 0 :(得分:1)
您可能需要引用密钥:
var test = '{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}'
并非所有JSON解析器中的所有人都期望键被引用
答案 1 :(得分:0)
您缺少按键周围的“ s”
错误:
JSON.parse('{key1: "val1", data:{ key2: "val2", key3: "val3" }}')
右:
JSON.parse('{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}')
答案 2 :(得分:0)
因为解析器需要双引号,所以在它们之间添加双引号-
var test = '{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}'
console.log(JSON.parse(test))
答案 3 :(得分:0)
对于您的问题:如何获得有效的JSON开头?
我说...使用JSON.stringify()
。
也就是说,如果您只是在学习JSON(看起来像您一样),请使用JSON.stringify()
作为教学工具。
在控制台中,输入:
obj = {key1: "val1", data:{ key2: "val2", key3: "val3" }}
JSON.stringify(obj)
您将看到结果是有效的JSON:
'{"key1":"val1","data":{"key2":"val2","key3":"val3"}}'
由此,您可能会看到缺少按键周围的双引号。
答案 4 :(得分:0)
如果您对使用该库返回字符串中的JavaScript值感到困惑,则可以使用JavaScript的eval()
,如下所示:
# nominal return value -- valid JavaScript in a string (that isn't JSON)
var rval_str = '{key1: "val1", data:{ key2: "val2", key3: "val3" }}'
# use eval() to 'decode' rval_str
eval("rval = " + rval_str)
rval
给予
{key1: "val1", data:{ key2: "val2", key3: "val3" }}
当然,如果您不信任库返回的内容,这将非常危险(使用eval
)。