Tengo un campo común en cada objeto JSON, es decir, Field A . Y tengo campos variables según los datos del servicio, es decir, ( campo variable A y campo variable B ).
Tengo datos JSON en este formato a continuación:
[{ "Field A": "ABC", "Variable Field A": "66" }, { "Field A": "DEF", "Variable Field A": "70" }, { "Field A": "GHI", "Variable Field A": "135" }, { "Field A": "JKL", "Variable Field A": "19" }, { "Field A": "ABC", "Variable Field B": "-729" }, { "Field A": "GHI", "Variable Field B": "962" }, { "Field A": "DEF", "Variable Field B": "334" }, { "Field A": "JKL", "Variable Field B":"241" }]Necesito juntar los campos variables según el campo común (aquí Campo A), de modo que todos los campos variables para un campo común estén disponibles dentro de un objeto. ¿Cómo puedo hacer que mi JSON se convierta en algo como esto?
[{ "Field A": "ABC", "Variable Field A": "66", "Variable Field B": "-729" }, { "Field A": "DEF", "Variable Field A": "70", "Variable Field B": "334" }, { "Field A": "GHI", "Variable Field A": "135", "Variable Field B": "962" }, { "Field A": "JKL", "Variable Field A": "19", "Variable Field B": "241 }]Decodifique su json en la estructura de datos adecuada y vuelva a crear su conjunto de objetos utilizando el algoritmo adecuado para la coincidencia.
Algo como:
Si está utilizando javascript para eso, verifique el método .hasOwnProperty("propertyName") que verifica si existe un campo en el objeto. Debería ser útil para verificar si tiene que obtener el "Campo variable A" o el "Campo variable B" del objeto.
Esta es una gran aplicación para la función de reducción de matrices. Prueba esto:
const data = [] // your JSON data data.reduce((acc,item)=>({ ...acc, [item['Field A']]: {...acc[item['Field A']],...item} }),{})El resultado:
{ ABC: { 'Field A': 'ABC', 'Variable Field A': '66', 'Variable Field B': '-729' }, DEF: { 'Field A': 'DEF', 'Variable Field A': '70', 'Variable Field B': '334' }, GHI: { 'Field A': 'GHI', 'Variable Field A': '135', 'Variable Field B': '962' }, JKL: { 'Field A': 'JKL', 'Variable Field A': '19', 'Variable Field B': '241' } }puedes hacer algo como esto
const group = (data, field) => Object.values(data.reduce((res, item) => { const existing = res[item[field]] || {} return { ...res, [item[field]]: {...existing, ...item} } }, {})) const data = [{ "Field A": "ABC", "Variable Field A": "66" }, { "Field A": "DEF", "Variable Field A": "70" }, { "Field A": "GHI", "Variable Field A": "135" }, { "Field A": "JKL", "Variable Field A": "19" }, { "Field A": "ABC", "Variable Field B": "-729" }, { "Field A": "GHI", "Variable Field B": "962" }, { "Field A": "DEF", "Variable Field B": "334" }, { "Field A": "JKL", "Variable Field B":"241" }] const result = group(data, 'Field A') console.log(result)