Función JSON.parse Reviver: ¿Acceso al objeto que se está reviviendo?
Al leer este, probé el código a continuación para obtener el objeto completo que contiene la propiedad que especifiqué.
let aTestStr = '{ "prop1": "this is prop 1", "prop2": { "prop2A": 25, "prop2B": 13, "prop2C": "This is 2-c" } }'; let aTestStr = '{"prop1": "this is prop 1", "prop2": {"prop2A": 25, "prop2B": 13, "prop2C": "This is 2-c"}}'; let aTestObj = JSON.parse(aTestStr, function(key, value) { //at this point, 'this' refers to the object being revived //Eg, when key == 'prop1', 'this' is an object with prop1 and prop2 //when key == prop2B, 'this' is an object with prop2A, prop2B and prop2C if (key == "prop2B") { // the object being revived('this') is an object named 'prop2' // add a prop to 'this' this.prop2D = 60; console.log(this); } });Volvería:
{prop2B: 13, prop2C: 'This is 2-c', prop2D: 60} Supongo que omite la propiedad prop2A porque this detecta después de que el condicional encuentra prop2B ..? Agradecería saber por qué y cómo obtener acceso al objeto completo.
Además, si tiene algo de tiempo, ¿puede explicar cómo obtener acceso al nivel más alto que this ? Por ejemplo, ¿hay alguna forma de imprimir prop2 (el nombre de this ) desde el condicional if (key == "prop2B") en la función reviver?
Para la pregunta n. ° 1, es porque no devuelve nada de su reanimador, por lo que el objeto en realidad pierde sus propiedades que ya han sido analizadas.
Simplemente agregue el return value al final de su reviver para tener el objeto "completo".
let aTestStr = '{"prop1": "this is prop 1", "prop2": {"prop2A": 25, "prop2B": 13, "prop2C": "This is 2-c"}}'; let aTestObj = JSON.parse(aTestStr, function(key, value) { if (key == "prop2B") { this.prop2D = 60; console.log(this); } return value; }); Y con respecto al #2, esto no es posible. JSON.parse() visita los valores desde las hojas hasta la raíz, por lo que el padre nunca apareció en el reanimador antes de que se hayan analizado todos los valores secundarios.
Lo mejor aquí es probablemente simplemente caminar de regreso a su objeto después de la reactivación.