El servidor me envía datos como JSON para describir un producto. Un producto consta de propiedades y matrices anidadas de propiedades, hasta 4 niveles de profundidad. En la interfaz, el usuario puede actualizar valores anidados profundos. ¿Necesito realizar un seguimiento de la ruta y luego reconstruir todo el objeto JSON para mi llamada POST de actualización? ¿O hay una forma más elegante de hacerlo? ¿O es malo el diseño del servicio backend?
datos como JSON
{ "productId": 10, "features": [ { "id": 45, "name": "Customization", "productOptions": [ { "id": 1, "color": ["red", "green"], }, { "id": 2, "slogans": [ {"id": 32, "name":"Thank You"}, {"id": 33, "name":"Thanks a lot"}, ], } ] } ] }entrada para editar eslogan
<input data-id="32" type="text" name="slogan" />edite JSON para enviar de vuelta al servidor
const update = {"id": 32, "name":"Thank You so much!"} // update slogan array solgansUpdateIndex = slogans.findIndex(obj => obj.id == 32) slogans[solgansUpdateIndex] = update ... // update whole object for the updating POST call {...data, //updateTree}No debería necesitar enviar todo el objeto de vuelta al servidor. Lo que debe hacer es enviar un conjunto de ID que identifiquen de forma única qué campo debe actualizarse.
Ejemplo: tomemos sus datos donde productId es 10 y featureId es 45
Puede crear un controlador en el backend como updateProductSlogan(int productId, int featureId, int sloganId, String/Slogan newSlogan).
Y luego, lo que debería hacer este punto final es obtener el eslogan correspondiente de su base de datos con una consulta, usando estos identificadores y actualizar ese eslogan con el valor de newSlogan param.
Nota: Si solo el campo que contiene eslóganes es el campo de características, también puede codificarlo y cambiar el método para actualizar el eslogan del updateProductSlogan(int productId, int sloganId, String/Slogan newSlogan). en el que obtendrá la propiedad de características sin necesidad de usar una identificación.
También quiero repetir mi comentario anterior de que, cuando se trabaja con cualquier JSON, siempre (1) se decodifica la cadena JSON en una estructura de datos; (2) trabajar con esa estructura de datos (no con la cadena); y si es necesario (3) codifique la estructura de datos nuevamente en una cadena.
Nunca debe intentar manipular la cadena "como una cadena". Trate el contenido JSON como una caja negra y confíe en que el "anillo codificador/decodificador mágico" siempre hará lo correcto. JSON es un estándar de datos internacional con bibliotecas de codificador/descodificador conocidas que todo el mundo usa.
El mismo principio se aplica a XML, YAML o cualquier otro método de codificación de cadenas. "Es una caja negra".