2017-10-10 3 views
0

J'ai un objet de réponse qui ressemble à ceci -analyse d'une réponse de chaîne JSON. Déjà essayé JSON.parse()

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

Je suis en train de lire le nom du pays comme celui-ci -

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 
} 

se undefined.

+2

Votre propriété de localisation est une chaîne. –

+0

Où est-il indéfini? –

+4

Ouais ne pense pas que c'est valide json –

Répondre

1

datapoint.location est un json non valide. Utilisez String#replace pour le convertir en une chaîne JSON valide, puis analyser:

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

+0

Correction du backend. Obtenir une réponse correcte maintenant qui est un JSON valide - {"pays": "Pologne", "latitude": 51.9667, "longitude": 19.7333}. Merci pour la suggestion. Cela aiderait aussi si le backend envoie une réponse incorrecte et que vous n'avez aucun contrôle sur celui-ci –

+1

La résolution du problème à la source est en effet la meilleure option. Je suppose que vous ne pouvez pas :) –

+0

Est-ce que '/ ([A-Za-z] +)/g' fonctionnerait de la même façon? –

1

La valeur à l'intérieur de votre propriété location n'est pas valide JSON. JSON.parse échoue à cause de cela. Vous avez besoin:

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

Notez comment les propriétés et les valeurs de chaîne sont entourés de " s.

+0

À quoi sert le downvote? La seule chose à laquelle je peux penser est que cela soit considéré comme un doublon évident, mais je ne vois pas de votes à clore ... –

+0

Je ne sais pas qui a été déprécié et pour quoi. Correction du backend. Obtenir une réponse correcte maintenant qui est un JSON valide - {"pays": "Pologne", "latitude": 51.9667, "longitude": 19.7333}. Merci pour les suggestions. –