我有一个节点应用程序,可以从中获取一些数据。我曾在SO..but上问过其他问题,我无法理解这一点。我需要访问结果的值。下面的代码显示了我从服务器获得的确切响应。其他答案(如JSON.parse()等)中描述的方法似乎都不起作用。
[{
query: {
"parameter1": "12",
"parameter2": "13",
"parameter3": 25
}
result: 6.58443
}]编辑:正如下面的注释中提到的,不幸的是,我不能在服务器端(来自外部源)修复这个问题。我必须在结束时处理这个坏掉的JSON,并提取结果的值。编辑2:是的,有这样的多个数组。内容和逗号部分不变。他们一个接一个地被列出来。
发布于 2018-02-27 17:10:43
尽管您无法接收这些数据,但是任何像jQuery $.ajax()和dataType='json'选项这样的库函数都不能接收这些数据(我的意思是,在本例中,您应该使用dataType="text"来避免过早地触发错误)。
...you显然需要在解析JSON之前修复JSON语法(正如我所了解的,您已经知道)。
如果这是你想要的,你最好的选择是正则表达式搜索和替换。
如果您知道您不会得到‘{括号:“}之类的东西,则非常简单:
示例:
var wrong = `
[{
"query": {
"parameter1": "12",
"parameter2": "13",
"parameter3": 25
}
"result": 6.58443
}]
`;
var good = wrong.replace(/}(?!\s*[,}\]])/g, '},');
var json = JSON.parse(good);
console.log(json);这是修复您提供的输入的最简单示例。
即使它没有在数组( ']‘结束后修复相同的问题,而且最重要的是,如果它已经修复了它(或者只是字符串以'}’而不是‘}’结尾,它就会添加一个额外的',‘在结束时又会造成混乱’。
一种更礼貌的解决问题的方法是用以下代码替换前面代码中的var good = ...行:
var good = wrong.replace(/(}|])(?!\s*[,}\]])/g, '$1,')
.replace(/,\s*$/, '')
;现在,您有了一个有效的json对象,因此访问其中的任何属性都是非常明显的。例如,json[0].result就是您所要求的。
另一方面,如果您可以在文字字符串中包含括号,那么它将更加困难(甚至不是不可能)。但我想很难做到.
发布于 2018-02-27 16:56:05
您可以做的是用back封装结果,使其具有(有效的)字符串文本,然后使用所需的任何方法获得结果,例如匹配的regex:
var arr = `[{
"query": {
"parameter1": "12",
"parameter2": "13",
"parameter3": 25
}
"result": 6.58443
}]`;
var match = arr.match(/("result": )(\d*.\d*)/);
console.log(match[2]);
发布于 2018-02-28 05:13:37
提供给above..all的建议指出了一种解决这一问题的方法。解决这个问题的唯一方法是使用好的旧Regex表达式。对于我的surprise..even来说,尽管有很多库需要处理JSON解析等等,但是要解决边缘情况(处理小客户端或不可靠的数据源时常见的),没有库可以处理这种场景。@Bitifet的答案就是解决这个problem..with正则表达式的方法。
https://stackoverflow.com/questions/49013415
复制相似问题