У меня есть объект JSON со структурой, приведенной ниже
const inputObj = {
"prop1": "val1",
"prop2": {
"prop2_1": "val2_1",
"prop2_2": "val2_2"
}
"prop3": "val3"
}
Моя цель: я хотел бы взять свойство, включая вложенное свойство, и сохранить результат в файле txt
, ноне в формате JSON.Для ясности вот мой ожидаемый результат в файле txt
:
{
prop1: {
id: 'prop1'
},
prop2_prop2_1: {
id: 'prop2.prop2_1'
},
prop2_prop2_2: {
id: 'prop2.prop2_2'
}
prop3: {
id: 'prop3'
}
}
До сих пор я мог написать не вложенное свойство, но все еще не в той структуре, которую ожидал.Вот результат на данный момент:
{
"prop1": "prop1",
"prop3": "prop3"
}
Он все еще в формате JSON, а не в структуре, которую я ожидал, и вложенное свойство все еще не перехвачено (я все еще думаю, как его получить)
Здесь приведен код для создания моего текущего результата:
const fs = require('fs')
const fileName = "./results.txt"
function getAllKeys(obj, path = [], result = []) {
Object.entries(obj).forEach(([k, v]) => {
if (typeof v === 'object') getAllKeys(v, path.concat(k), result)
else result.push(path.concat(k).join("."))
})
return result
}
const inputToFile = getAllKeys(inputObj)
// console.log(inputToFile)
// result of the console.log
// prop1
// prop2.prop2_1
// prop2.prop2_2
// prop3
const newObj = {}
for (var i = 0; i < inputToFile.length; i++) {
var input = inputToFile[i]
var dotIndex = input.indexOf('.') // to check if its from the nested JSON property of the inputObj
if (dotIndex === -1) {
// no dot or nested property in the JSON
newObj[input] = input.toString()
} else {
// if the input contain dot, which is a nested JSON
}
}
fs.writeFileSync(fileName, JSON.stringfy(newObj))
// if I use above line, the result in the file is as I had mention above. But, if the code is like below:
const finals = JSON.stringfy(newObj)
fs.writeFileSync(fileName, JSON.parse(finals))
// the output in the file is only "[Object object]" without double quote
Обновление Причина, по которой мне нужно отформатировать результат, заключается в том, что я хочу использовать реагировать-intl.У меня уже есть файл локали (перевод), который выглядит как inputObj (структура).Затем мне нужно создать файл, подобный этому (ниже), чтобы библиотека могла его перевести:
import { defineMessages } from 'react-intl';
const MessagesId = defineMessages({
prop1: {
id: 'prop1'
},
prop2_prop2_1: {
id: 'prop2.prop2_1'
},
prop2_prop2_2: {
id: 'prop2.prop2_2'
},
prop3: {
id: 'prop3'
}
})
export default MessagesId;
Поэтому мне нужно, чтобы он не был похож на JSON.Потому что у меня уже есть тысячи кодов для перевода, но мне нужно определить его в MessagesId.Было бы так много времени, если я сделаю это вручную .__.Ps: реагирует на это работает, проблема только конвертации, как мои первоначальные вопросы