Aquí hay un fragmento de mi objeto JSON (EDITADO) -
[{ "traditional": "%", "simplified": "%", "referencedTraditional": [], "referencedSimplified": [], "pinyinNumeric": "pa1", "pinyinDiacritic": "pā", "definitions": [ "percent (Tw)" ], "definitionsDiacritic": [ "percent (Tw)" ] }, { "traditional":"龠","simplified":"龠","referencedTraditional":[{"cp":"9fa0","c":"龠"}],"referencedSimplified":[{"cp":"9fa0","c":"龠"}],"pinyinNumeric":"yue4","pinyinDiacritic":"yuè","definitions":["ancient unit of volume (half a 合[ge3], equivalent to 50ml)","ancient flute"],"definitionsDiacritic":["ancient unit of volume (half a 合[gě], equivalent to 50ml)","ancient flute"]}, {"traditional":"龡","simplified":"龡","referencedTraditional":[{"cp":"9fa1","c":"龡"}],"referencedSimplified":[{"cp":"9fa1","c":"龡"}],"pinyinNumeric":"chui4","pinyinDiacritic":"chuì","definitions":["to blow (a flute)","archaic version of 吹"],"definitionsDiacritic":["to blow (a flute)","archaic version of 吹"]}, ]Quiero convertir cada clave llamada definiciones de una matriz en una cadena.
Por ejemplo, de ["percent (Tw)"] a "percent (Tw)" . Básicamente, no quiero los soportes de matriz.
Hasta ahora, he intentado recorrer el archivo y convertir cada clave de "definiciones" con JSON.stringify() o toString() -
translations.forEach(key => JSON.stringify((key.definitions)))Sin embargo, nada cambia en el archivo de salida.
El problema con el código es el siguiente
translations.forEach(key => JSON.stringify((key.definitions)))Simplemente ejecutar esta declaración no actualizará el valor de la clave dentro de ese objeto. Tienes que actualizar el objeto para esto.
Lógica.
translations de objetos. Object.entries(translations).forEach para eso."definitions" en esa clave."definitions" en eso, ejecute su lógica de cadena. Prefiero Array.join() en comparación con JSON.stringify .violín de trabajo
const translations = { "traditional": "%", "simplified": "%", "referencedTraditional": [], "referencedSimplified": [], "pinyinNumeric": "pa1", "pinyinDiacritic": "pā", "definitions": [ "percent (Tw)" ], "definitionsDiacritic": [ "percent (Tw)" ] } Object.entries(translations).forEach(([key, value]) => key.includes('definitions') ? translations[key] = translations[key].join("") : null); console.log(translations); const obj = { traditional: '%', simplified: '%', referencedTraditional: [], referencedSimplified: [], pinyinNumeric: 'pa1', pinyinDiacritic: 'pā', definitions: ['percent (Tw)'], definitionsDiacritic: ['percent (Tw)'], }; const returnStringDefinitions = (obj) => { const arr = []; for (const [key, value] of Object.entries(obj)) { if (key === 'definitions') arr.push(value.toString()); } return arr; }; console.log(returnStringDefinitions(obj));Creo que lo que te puede estar pasando es que no estás guardando la matriz resultante en ninguna parte. El enfoque podría ser crear un nuevo objeto.
const obj = { traditional: '%', simplified: '%', referencedTraditional: [], referencedSimplified: [], pinyinNumeric: 'pa1', pinyinDiacritic: 'pā', definitions: ['percent (Tw)'], definitionsDiacritic: ['percent (Tw)'], }; const output = Object.keys(obj).reduce((accumulator, currentKey) => { const currentValue = obj[currentKey]; if (currentKey === 'definitions' && Array.isArray(currentValue)) { accumulator[currentKey] = currentValue.join(''); } else { accumulator[currentKey] = currentValue; } return accumulator; }, {}) console.log(output);Esta solución verifica si es una matriz, y también une todo en la matriz en caso de que haya varias cosas en la matriz, pero cómo se maneja esto realmente depende de usted :)