Piqué
Piqué

Reputation: 1163

parsing a JSON string response. Already tried JSON.parse()

I have a response object that looks something like this -

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

I am trying to read the country name like this -

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
}

getting undefined.

Upvotes: 0

Views: 248

Answers (2)

Ori Drori
Ori Drori

Reputation: 192707

datapoint.location is a not valid json. Use String#replace to convert it to a valid json string and then parse:

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);
});

Upvotes: 1

Kirk Larkin
Kirk Larkin

Reputation: 93233

The value inside of your location property is not valid JSON. JSON.parse fails because of that. You would need the following:

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

Note how the properties and string values are surrounded with "s.

Upvotes: 1

Related Questions