我有一个大而复杂的JSON,我想提取特定的值到csv文件
我创建了Javascript函数来将JSON转换为CSV。我不知道如何提取这些值
解决方案如下:我们导入json文件,然后在记录中搜索包含"answer_comments"的键,因为所有的问题都有这个键。
然后我们使用正则表达式取题目的名称。
现在我们有了问题的标题,我们可以遍历它们并获得每个问题的值。
const data = require("./data.json");
const record = data["ex:recordCollection"]["ex:record"];
const questions = Object.keys(record).filter((a) =>
a.toLowerCase().includes("answer_comments")
);
const result = questions.map((q) => {
const title: string = q.match(/(?<=ex:)(.*)(?=__)/gm)[0];
return {
question: title,
answer: record[`ex:${title}`]["ex:Item"]["_text"],
answer_comment: !record[`ex:${title}__Answer_Comments`] && "",
implementation: record[`ex:${title}__Implementation`]
? record[`ex:${title}__Implementation`]["ex:Item"]["_text"]
: "",
implementation_comments:
!record[`ex:${title}__Implementation_Comments`] && "",
};
});
console.log(result);
如果对键感兴趣,使用Object.Keys();如果对这些键关联的值感兴趣,使用Object.values();如果两者都需要,则使用Object.entries()。
JSON.parse
是您正在寻找的函数。它解析JSON数据并将其转换为原生javascript对象。您可以获取文件,并将其传递给函数
的例子:
const fs = require("fs")
var json = JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8'));
你也可以简单地要求一个json文件,像这样:
const json = require("path/to/file.json")
但是,我不推荐这种方法,因为它有很多缺点:
require
正在阻塞,这意味着如果你加载大json文件,它将阻塞执行,直到它完成加载- 文件只被读取一次,随后的调用将只返回缓存的版本