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

How do I convert the following to a valid JSON?

给出

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)) => returns 字符串双解析结果错误。

我错过了什么?

如何通过解析得到 JSON 而不是字符串?

您可能需要引用您的密钥:

var test = '{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}'

除了许多 JSON 解析器之外,并非所有解析器都希望引用键

您缺少按键周围的 "s

错误: JSON.parse('{key1: "val1", data:{ key2: "val2", key3: "val3" }}')

右: JSON.parse('{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}')

为键添加双引号,因为解析器需要它们 -

var test = '{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}'
console.log(JSON.parse(test))

关于您的问题:我怎样才能获得有效的 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"}}'

从这里,您可以看到您遗漏了键周围的双引号。

如果您受困于该库在字符串中返回看起来像 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)。