Estoy obteniendo un JSON de otra aplicación. Me gustaría analizar ese JSON y leer los datos presentes en ellos. El JSON contiene algunos de los datos definidos por el usuario que son dinámicos y el par clave/valor puede ser dinámico, por lo que estoy un poco confundido acerca de cómo leer estos datos dinámicos y realizar un procesamiento posterior.
El siguiente es el JSON de muestra que me gustaría procesar:
{ "context": [ { "one": "https://example.one.com" }, { "two": "https://example.two.com" }, { "three": "https://example.three.com" } ], "name": "Batman", "age": "30", "one:myField": { "two:myField2": "Hello" }, "three:myField3": "Hello2" } Puedo leer algunos de los datos estáticos/bien definidos directamente, como el name & age , pero no entiendo cómo leer algunos de los datos definidos por el usuario/dinámicos de este JSON, ya que no tiene una clave/valor definido. o no hay garantía de que aparecerá en el pedido después de la propiedad de edad.
Estoy tratando de encontrar una manera de leer/obtener todos los datos definidos por el usuario de este JSON:
"one:myField": { "two:myField2": "Hello" }, "three:myField3": "Hello2"¿Hay una forma directa de lograr esto o usar alguna biblioteca? Estoy desarrollando la aplicación usando Vuejs/Nuxtjs.
Creo que esa no es la mejor API que está utilizando, debe tener parámetros de objetos constantes para que siempre sepa cómo encontrar cosas. Si desea encontrar parámetros desconocidos, puede analizar JSON para objetar y recorrerlo.
const object = { a: 1, b: 2, c: 3 }; for (const property in object) { console.log(`${property}: ${object[property]}`); }Simplemente puede lograrlo iterando sobre Object.keys() .
demostración :
const jsonData = { "context": [ { "one": "https://example.one.com" }, { "two": "https://example.two.com" }, { "three": "https://example.three.com" } ], "name": "Batman", "age": "30", "one:myField": { "two:myField2": "Hello" }, "three:myField3": "Hello2" }; Object.keys(jsonData).forEach(key => { if (typeof jsonData[key] === 'object') { Object.keys(jsonData[key]).forEach(innerObjKey => { console.log(innerObjKey, jsonData[key][innerObjKey]) }) } else { console.log(key, jsonData[key]) } })¡Combinando Object.keys con una función recursiva , incluso si tiene varios objetos anidados, funcionará sin tener que refactorizar su código cada vez!
const jsonData = { context: [ { one: "https://example.one.com", }, { two: "https://example.two.com", }, { three: "https://example.three.com", }, ], name: "Batman", age: "30", "one:myField": { "two:myField2": "Hello", "one_nested:myField": { another_nested_key: "another_nested_value", }, }, "three:myField3": "Hello2", }; recursive(jsonData); function recursive(nestedKey) { if (typeof nestedKey !== "object") return; Object.keys(nestedKey).forEach((key) => { if (typeof nestedKey[key] === "object") { recursive(nestedKey[key]); } else { console.log(key, nestedKey[key]); // add your conditions here if (key === "name") { // bla bla bla } } }); }