如何将以下内容转换为有效的JSON?

时间:2019-06-17 19:09:55

标签: javascript json jsonparser

给予

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而不是字符串?

5 个答案:

答案 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)。