从复杂JSON中提取值



我有一个大而复杂的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")

但是,我不推荐这种方法,因为它有很多缺点:

  1. require正在阻塞,这意味着如果你加载大json文件,它将阻塞执行,直到它完成加载
  2. 文件只被读取一次,随后的调用将只返回缓存的版本

最新更新