【问题标题】:parsing a JSON string response. Already tried JSON.parse()解析 JSON 字符串响应。已经尝试过 JSON.parse()
【发布时间】:2017-10-11 05:19:50
【问题描述】:

我有一个看起来像这样的响应对象 -

{  
location: '{country:Poland,latitude:50.0575,longitude:19.9802}',
ip: '83.26.234.177',
name: 'John Doe'   
}

我正在尝试这样读取国家/地区名称 -

data.forEach(function(datapoint) {
    dataObject.ip = datapoint.ip;
    var locationObject = datapoint.location; // also tried JSON.parse
    console.log(locationObject); //{country:Poland,latitude:50.0575,longitude:19.9802}
    console.log(locationObject.country); // undefined
    console.log(locationObject.latitude); //undefined
    console.log(locationObject.longitude); //undefined
}

获取undefined

【问题讨论】:

  • 您的位置属性是字符串。
  • 是的,不认为这是有效的 json
  • location 值不是有效的 JSON 字符串,有效的 JSON 字符串是 {"country":"Poland","latitude":50.0575,"longitude":19.9802}
  • datapoint.location 是一个字符串。它没有任何属性。
  • 修复给您无效响应的服务器。如果不是您的,请提交错误报告。

标签: javascript json node.js object


【解决方案1】:

datapoint.location 是无效的 json。使用String#replace将其转换为有效的json字符串然后解析:

var data = [{
  location: '{country:Poland,latitude:50.0575,longitude:19.9802}',
  ip: '83.26.234.177',
  name: 'John Doe'
}];


data.forEach(function(datapoint) {
  var json = datapoint.location.replace(/([^\d\.{}:,]+)/g, '"$1"'); // wrap the keys and non number values in quotes
  var locationObject = JSON.parse(json);
  console.log(locationObject.country);
  console.log(locationObject.latitude);
  console.log(locationObject.longitude);
});

【讨论】:

  • 修复了后端。现在得到一个正确的响应,它是一个有效的 JSON - {"country":"Poland","latitude":51.9667,"longitude":19.7333}。谢谢你的建议。如果后端发送不正确的响应并且您无法控制它,这也会有所帮助
  • 从源头解决问题确实是更好的选择。我假设你不能:)
  • 在这种情况下它会。
【解决方案2】:

location 属性中的值不是有效的 JSON。 JSON.parse 因此失败。您将需要以下内容:

'{"country":"Poland","latitude":50.0575,"longitude":19.9802}'

注意属性和字符串值是如何被"s 包围的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多