在节点js中获取json varibale的嵌套属性

时间:2018-12-19 04:44:31

标签: javascript node.js json

如何获取节点js中json变量的所有属性并将其全部放入txt文件中? 如果JSON的结构如下所示,则我只能创建该属性的txt文件。

// JSON Variable
const jsonValue1 = {
    "prop1": "val1",
    "prop2": "val2",
    "prop3": "val3",
}

const fs = require('fs')
const keys = Object.keys(jsonValue1)
const fileName = './keys_id.txt'
fs.writeFileSync(fileName, keys.join('\n))

//在keys_id.txt文件中输出

prop1
prop2
prop3

但是,如果我的JSON结构如下:

const jsonValue2 = {
    "prop1": "val1",
    "prop2": {
        "prop2_1": "val2_1"
        "prop2_2": "val2_2"
    }
    "prop3": "val3"
}

如何获取嵌套属性?实际上,我在文件中的预期输出将是这样的:

prop1
prop2.prop2_1
prop2.prop2_2
prop3

有可能吗?

1 个答案:

答案 0 :(得分:2)

在输入对象的app.get('/:id', async (req, res) => { const { id } = req.params; // Retrieve model which contain info documents of user with id const UserInfo = mongoose.model('User_' + id, UserInfoSchema); const logs = await UserInfo.find(); res.send(logs); }) 上使用递归reduce

entries

请注意,您需要更正const inputObj = { "prop1": "val1", "prop2": { "prop2_1": "val2_1", "prop2_2": "val2_2" }, "prop3": "val3" }; const getKeys = (obj, props=[], accum=[]) => ( Object.entries(obj).reduce((a, [key, val]) => { const thisPropArr = [...props, key]; if (typeof val === 'object') { a.push(...getKeys(val, thisPropArr)) } else { a.push(thisPropArr.join('.')); } return a; }, accum) ); console.log(getKeys(inputObj));对象的语法-键值对必须用逗号分隔。 (仅用空格隔开的对将产生jsonValue2

还请注意,您拥有的只是一个普通对象,而不是JSON-JSON是一种以字符串格式表示对象的方法。如果不涉及序列化/反序列化,则也不涉及JSON。最好将输入对象命名为SyntaxError,而不是inputObj,以免混淆自己。