{
"id":"3",
"created":"0000-00-00",
"parentIDs":null,
"childIDs":"",
"uid":"movies",
"title":"Movies",
"related":"movies",
"pos":"",
"css":"{ "background-image":"-webkit-linear-gradient(bottom, rgb(46,44,46) 49%, rgb(18,17,18) 75%)" }"
}
从字符串中:
value = ""id":"3","created":"0000-00-00","parentIDs":null,"childIDs":"","uid":"imdb","title":"Imdb","related":"movies","pos":"""
这个字符串来自数据库,所以我无法更改格式,但应该是正确的格式。
(这个字符串来自一个类似的字符串数组,我遍历它们时不知怎么丢失了{}括号)
我尝试使用 value.substr(1, value.length - 2);
去掉外部引号。然后用 .toJSON();
转换它,但它只会添加很多不需要的额外反斜杠。
我只需要加上 {}
,然后javascript就能把它当作JSON对象来处理。
有没有快捷的方法实现?或者是否有一个小型库可以将我的混乱字符串巧妙地转换为JSON对象?
[update]
我尝试了:eval('{' + value + '}');
但在Chrome中出现 Uncaught SyntaxError: Unexpected token :
。
我尝试使用 JSON.parse,但在 Chrome 和 Firefox 中出现 TypeError: JSON.parse 不是一个函数
,这必须是字符串的格式问题。我开始怀疑 "css" 条目,虽然它在第一个 "id" 条目时就开始抱怨了,但它期望的是一个函数而不是 JSON?
(我削减了原始JSON,但忘记了最重要的 "css" 条目)
[更新2]
好吧,所以我将 css 数据更改为'
而不是"
,现在它会实际解析,但现在我的脚本已经崩溃了,因为我期望从数据库获得原始CSS,有没有办法将结果中的'css':'blabla'
改为:"css":"blabla"
?
JSON.parse
。如果您收到TypeError:JSON.parse不是函数
- 我以前从未见过,并且对我来说没有太多意义 - 那么您需要为此启动一个新问题,最好提供一个测试用例让我们复制该问题。 - Mark Ameryeval
来执行一个包含JSON的字符串,因为它不是有效的JavaScript代码。你需要在字符串周围添加(...)
,例如eval('(' + jsonStr + ')')
。但正如已经多次提到的那样,一旦你有了有效的JSON,你应该使用JSON.parse
。 - Felix Kling