如何处理JQuery / Javascript中来自服务器(源)的无效JSON

时间:2018-06-29 12:09:11

标签: javascript jquery html css json

在我的应用程序中,我必须进行一个Web服务调用,该调用将对象数组作为JSON返回,我需要通过它来动态地迭代和构造UI(针对数组中的每个对象)。

问题是,对于某些请求,我收到无效/错误的JSON,因此jquery.parse()仅仅失败了,代码崩溃了。但是我无法事先知道,对于哪个请求,我将获得无效的JSON!

有什么方法可以避免由于错误的JSON而导致应用程序崩溃?我知道一种方法是在源代码本身更改JSON或在JS中使用try-catch。但是,有什么方法可以处理不良的JSON场景并从中构造有效的场景。像任何可用的库或将可能的错误JSON转换为有效JSON的算法一样?

这样的不良JSON是:

"key1":"http://someUrl.com/somePath/path2/catalog.do?someVal\u003dsearch\u0026q\u003d""foo+bar"","key2":""...

在上述情况下,foo + bar前后两个连续的双引号引起了此问题,它应该有点像这样:

"key1":"http://someUrl.com/somePath/path2/catalog.do?someVal\u003dsearch\u0026q\u003d","foo+bar:"","key2":""...

(在foo + bar之前加了一个逗号,在foo + bar之后加了一个冒号)。但是我猜可能还有其他原因导致JSON变差。

我在用户界面中使用JS和JQuery(v 1.10.x)。

谢谢

1 个答案:

答案 0 :(得分:0)

这不会赢得任何美容奖项,但应该可以完成工作:

const reg = /"\w+"\s*:\s*"([\w\s\.\$\/\\\?\+"\=\&]*)",/;
const result = `"key1":"someVal.com/Path1/Path2?route\u003dsearch\u0026q\u003d""foo+bar"", "key2":"..."`;
let match;
while (match = reg.exec(result)) {
  result = result.replace(match[1], match[1].replace(/"/g, `'`));
}
console.log(JSON.parse('{' + result + '}');