首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中提取不完整JSON数组中对象的值?

如何在Javascript中提取不完整JSON数组中对象的值?
EN

Stack Overflow用户
提问于 2018-02-27 16:26:24
回答 4查看 454关注 0票数 0

我有一个节点应用程序,可以从中获取一些数据。我曾在SO..but上问过其他问题,我无法理解这一点。我需要访问结果的值。下面的代码显示了我从服务器获得的确切响应。其他答案(如JSON.parse()等)中描述的方法似乎都不起作用。

代码语言:javascript
复制
    [{
      query: {
                "parameter1": "12",
                "parameter2": "13",
                "parameter3": 25
               }
      result: 6.58443
    }]

编辑:正如下面的注释中提到的,不幸的是,我不能在服务器端(来自外部源)修复这个问题。我必须在结束时处理这个坏掉的JSON,并提取结果的值。编辑2:是的,有这样的多个数组。内容和逗号部分不变。他们一个接一个地被列出来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-27 17:10:43

尽管您无法接收这些数据,但是任何像jQuery $.ajax()和dataType='json'选项这样的库函数都不能接收这些数据(我的意思是,在本例中,您应该使用dataType="text"来避免过早地触发错误)。

...you显然需要在解析JSON之前修复JSON语法(正如我所了解的,您已经知道)。

如果这是你想要的,你最好的选择是正则表达式搜索和替换。

如果您知道您不会得到‘{括号:“}之类的东西,则非常简单:

示例:

代码语言:javascript
复制
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 = ...行:

代码语言:javascript
复制
var good = wrong.replace(/(}|])(?!\s*[,}\]])/g, '$1,')
    .replace(/,\s*$/, '')
;

现在,您有了一个有效的json对象,因此访问其中的任何属性都是非常明显的。例如,json[0].result就是您所要求的。

另一方面,如果您可以在文字字符串中包含括号,那么它将更加困难(甚至不是不可能)。但我想很难做到.

票数 2
EN

Stack Overflow用户

发布于 2018-02-27 16:56:05

您可以做的是用back封装结果,使其具有(有效的)字符串文本,然后使用所需的任何方法获得结果,例如匹配的regex:

代码语言:javascript
复制
var arr =  `[{
      "query": {
                "parameter1": "12",
                "parameter2": "13",
                "parameter3": 25
               }
      "result": 6.58443
}]`;

var match = arr.match(/("result": )(\d*.\d*)/);

console.log(match[2]);

票数 0
EN

Stack Overflow用户

发布于 2018-02-28 05:13:37

提供给above..all的建议指出了一种解决这一问题的方法。解决这个问题的唯一方法是使用好的旧Regex表达式。对于我的surprise..even来说,尽管有很多库需要处理JSON解析等等,但是要解决边缘情况(处理小客户端或不可靠的数据源时常见的),没有库可以处理这种场景。@Bitifet的答案就是解决这个problem..with正则表达式的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49013415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档