使用Node.js将嵌套的JSON转换为CSV

4

我希望使用node.js将嵌套的json转换为csv文件。 我的json结构如下:

[
{
    "Make": "Nissan",
    "Model": "Murano",
    "Year": "2013",
    "Specifications": {
        "Mileage": "7106",
        "Trim": "SAWD"
    },
    "Items": [
        {
            "flavor": {
                "name": "Cherry",
                "id": 1
            },
            "packSize": {
                "name": "200ML",
                "id": 1
            }
        },
        {
            "flavor": {
                "name": "Vanilla",
                "id": 2
            },
            "packSize": {
                "name": "300ML",
                "id": 2
            }
        }
    ]
},
{
    "Make": "BMW",
    "Model": "X5",
    "Year": "2014",
    "Specifications": {
        "Mileage": "3287",
        "Trim": "M"
    },
    "Items": [
        {
            "flavor": {
                "name": "Cherry",
                "id": 1
            },
            "packSize": {
                "name": "200ML",
                "id": 1
            }
        },
        {
            "flavor": {
                "name": "Vanilla",
                "id": 2
            },
            "packSize": {
                "name": "300ML",
                "id": 2
            }
        }
    ]
}
]

我已经使用了 'json-2-csv' 模块,但它只能转换简单的结构而无法转换嵌套结构。 只有 'make'、'model'、'year' 和 'specification' 能被转换,'items' 无法被转换。 如何解决这个问题呢?

2个回答

6
您可以使用模块jsonexport,很容易使用,可以查看以下示例:

这是使用您提供的json和jsonexport输出的结果: enter image description here

示例:

var jsonexport = require('jsonexport');

var contacts = [{
   name: 'Bob',
   lastname: 'Smith',
   family: {
       name: 'Peter',
       type: 'Father'
   }
},{
   name: 'James',
   lastname: 'David',
   family:{
       name: 'Julie',
       type: 'Mother'
   }
},{
   name: 'Robert',
   lastname: 'Miller',
   family: null,
   location: [1231,3214,4214]
},{
   name: 'David',
   lastname: 'Martin',
   nickname: 'dmartin'
}];

jsonexport(contacts,function(err, csv){
    if(err) return console.log(err);
    console.log(csv);
});

输出结果:
lastname;name;family.type;family.name;nickname;location
Smith;Bob;Father;Peter;;
David;James;Mother;Julie;;
Miller;Robert;;;;1231,3214,4214
Martin;David;;;dmartin;

Source: https://www.npmjs.com/package/jsonexport


关于之前提到的 JSON 值,它无法正常工作。请尝试使用该 JSON 数组并提供适当的解决方案。 - Subham
我刚用jsonexport测试了一下,得到了这个输出,这是你期望的吗?Items.packSize.id,Items.packSize.name,Items.flavor.id,Items.flavor.name,Specifications.Trim,Specifications.Mileage,Year,Model,Make 1,200毫升,1,樱桃味,SAWD,7106,2013,Murano,日产 2,300毫升,2,香草味,,,,, 1,200毫升,1,樱桃味,M,3287,2014,X5,BMW 2,300毫升,2,香草味,,,,, - Kauê Gimenes
不好意思,make、model和year的值在哪里?输出结果有一些空白值。 - Subham
@Subham 我在我的回答中包含了一张图片,这样你就能理解CSV的含义以及模型和年份字段的位置。 - Kauê Gimenes
@Subham,希望现在清楚了,jsonexport 能够处理你提供的 JSON =) - Kauê Gimenes
1
看起来该库有一个fillGaps选项,可以防止数据丢失。请参阅https://www.npmjs.com/package/jsonexport文档。 - Kimball Robinson

0

你的列数总是一样的吗? 例如:你有固定的(或最大的)项目数量吗?

Make;Model;Year;Mileage;Trim;Item_1_flavor_name;Item_1_packSize_name;Item_2_flavor_name;Item_2_packSize_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接