Mise à jour: Ce JSON n'est qu'un des exemples, j'ai besoin de lire ces fichiers JSON et de les transmettre à une fonction qui accepte JSONObject.
J'ai un JSON comme celui-ci -
var parsed = JSON.parse(myJson);
3 Réponses :
Vous pouvez déjà utiliser json comme un objet javascript
if (myJSON.log && myJSON.log.entries && myJSON.log.entries.length > 0) {
for (const element of myJSON.log.entries) {
if (element.response && element.response.content && element.response.content.text) {
try {
element.response.content.text = JSON.parse(element.response.content.text);
} catch (error) {
console.log('do nothing')
}
}
}
}
Si vous voulez analyser 'log.entries.response.content.text', vous pouvez faire quelque chose comme ça
const myJSON = {
"log":{
"version":"1.2",
"entries":[
{
"response":{
"status":200,
"statusText":"OK",
"httpVersion":"HTTP/1.1",
"headers":[
{
"name":"Date",
"value":"Tue, 19 Feb 2019 13:50:34 GMT"
},
{
"name":"CF-RAY",
"value":"4ab934095ceacc4c-ZRH"
},
{
"name":"Content-Encoding",
"value":"gzip"
}
],
"cookies":[
],
"content":{
"size":155,
"mimeType":"application/json",
"compression":0,
"text":"{\"ip\":\"45.64.195.115\",\"ip_decimal\":759219059,\"country\":\"India\",\"country_eu\":false,\"country_iso\":\"IN\",\"city\":\"nocity\",\"latitude\":98.975,\"longitude\":92.8258}"
},
"redirectURL":"",
"headersSize":230,
"bodySize":155,
"_transferSize":385
},
"cache":{
},
"timings":{
"blocked":6.805000007039867,
"dns":-1,
"ssl":-1,
"connect":-1,
"send":0.22000000000000064,
"wait":174.87700000413787,
"receive":11.549999995622784,
"_blocked_queueing":0.8590000070398673
},
"serverIPAddress":"100.28.12.103",
"_initiator":{
"type":"other"
},
"_priority":"VeryHigh",
"connection":"509100",
"pageref":"page_2"
}
]
}
}
Étonnamment, ce conseil fonctionne. Au lieu de l'analyser, je l'ai passé directement à la fonction. Laissez-moi essayer quelques autres exemples.
c'est parce que
myJson.log.entries[0].response.content.text = JSON.parse(myJson.log.entries[0].response.content.text);
est après JSON stringify, donc vous devez avant de l'analyser et ensuite analyser l'objet entier.
alors faites ceci:
myJson.log.entries[0].response.content.text
Assez simple: vous devez juste être conscient du moment où vous avez un objet javascript, et lorsque vous avez une chaîne qui représente un objet javascript au format JSON.
Dans l'exemple que vous avez donné, votre objet externe ressemble à un objet javascript, pas une chaîne JSON. Vous n'avez donc pas besoin de l'analyser, vous pouvez simplement le manipuler. Intégré à l'intérieur, il y a un élément nommé "texte", qui est une chaîne JSON. Vous pouvez accéder à l'élément de texte, puis vous pouvez analyser avec JSON.parse. Voici un exemple (dans lequel j'ai coupé la plupart du contenu superflu dans votre objet de niveau supérieur):
{
"ip": "45.64.195.115",
"ip_decimal": 759219059,
"country": "India",
"country_eu": false,
"country_iso": "IN",
"city": "nocity",
"latitude": 98.975,
"longitude": 92.8258
}
Cela produira la sortie suivante:
const myObj = {"log": {
"version": "1.2",
"entries": [
{
"content": {
"size": 155,
"mimeType": "application/json",
"compression": 0,
"text": "{\"ip\":\"45.64.195.115\",\"ip_decimal\":759219059,\"country\":\"India\",\"country_eu\":false,\"country_iso\":\"IN\",\"city\":\"nocity\",\"latitude\":98.975,\"longitude\":92.8258}"
}
}
]
}
};
const anotherObj = JSON.parse(myObj.log.entries[0].content.text);
console.log(JSON.stringify(anotherObj, null, 3));
Ce que vous avez publié n'est pas JSON mais un objet JS simple. Ainsi, vous pouvez accéder directement au
texteet analyser simplement ceciLorsque vous postez une question, veuillez revenir et voter pour toute réponse correcte / utile.
Je l'ai fait en fait. Le même jour que j'ai posé la question.