var text = "[{"name":"小红","age":12,}]";
or
var text = "http://www.baidu.com";
or
var text = "12";
有一个字符串可能是上面随机的类型,如何完整的解析。尝试了用JSON.parse和eval都不能很好的解析出来。
求教!!
var text = "[{"name":"小红","age":12,}]";
or
var text = "http://www.baidu.com";
or
var text = "12";
有一个字符串可能是上面随机的类型,如何完整的解析。尝试了用JSON.parse和eval都不能很好的解析出来。
求教!!
如果直接是字符串,则直接按script
加载即可。这个无论如何都不能用JSON.parse解析的。
不过你第1行字符串肯定是有问题的
var text = "[{"name":"小红","age":12,}]";
无论如何都不是正确的格式,要
var text = [{"name":"小红","age":12,}];
才正确。
如果这个字符串是拼接出来的,需要对[{"name":"小红","age":12,}]
进行特殊处理。
如果把var text=
去掉,把所有两端的引号去掉,并把内容作为json字符串来处理,则这些内容都应该可以JSON解析。
try catch 语句包一下,不是合法 JSON 数据就还是用原来的数据形式。
function getParsedJson(text) {
let result;
try {
result = JSON.parse(text);
} catch (e) {
result = text;
}
return result;
}
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
2 回答4.2k 阅读✓ 已解决
5 回答2.2k 阅读
3 回答2.7k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
看起来很简单,似乎加一个
try...catch...
就能够解决但实际上,跑出来才发现
'[{"name":"小红","age":12,}]'
这根本就不是一个 JSON,12
后面有一个逗号。简单地考虑使用eval
来修,那就在catch
里再加一层:说实在我是不赞成用
eval
的,但是不用eval
就得去自己解析。最后还是“懒”占了上风!不过上面的代码嵌套有点深,而且如果还有别的尝试方法,会更深,所以处理一下:
简单的说就是一直尝试到成功为此,最后用
return s
来容错。如果你有其他解析方法,按顺序往数组里加就行。上面的
continue
可以不写,但是避免eslint(no-empty)
,所以写个continue
。