我有一个通过API下载的JSON文件,我需要从中提取特定数据。我只需要提取32个可用值中的12个-其中一些值是嵌套的。我相信我需要创建一个排序的“模板”,遍历JSON,以便从嵌套数组中提取一些值,获取我想要的项目,并使用这些项目创建可下载的CSV。我只是涉足JS,我正在寻找有关如何解决此问题的指南。我已经尝试过papaparse,并且能够创建可下载的CSV,但是它是一个平面文件,无法查看嵌套数组。另外,我无法正确标记一些唯一字段(请参见下文)。
**警告** JSON对象中的数组之一只有ID来标识值。例如,在CSV中,我必须能够说出ID 3800208的意思是“颜色”-这意味着,在CSV中,列标题需要用相应的值说“颜色”。您会在JSON示例中看到“ bespoke_fields”数组包含我想要的这些嵌套值。
我真的希望有人可以告诉我最好的方法来遍历此JSON,并仅获取所需的数据并创建可下载的CSV。这是一些示例JSON。我需要从“ bespoke_fields”数组中提取ID,created_at,updated_at,主题,状态,类型,requester_id,company_id,has_items和三个值,并将其以纯CSV显示。
"referrals": [
{
"url": "https://api.website.com/my.json",
"id": 23487,
"created_at": "2019-05-09T15:06:47Z",
"updated_at": "2019-05-14T18:12:04Z",
"type": "request",
"subject": "Cum ceteris in veneratione tui montes, nascetur mus.",
"description": "Fabio vel iudice vincam, sunt in culpa qui officia.",
"priority": "low",
"status": "new",
"recipient": null,
"requester_id": 142,
"submitter_id": 142,
"assignee_id": null,
"company_id": 5498,
"group_id": 3548,
"co_ids": [],
"follow_ids": [],
"email_cc_ids": [],
"forum_topic_id": null,
"issue_id": null,
"has_items": false,
"is_public": true,
"deadline_at": null,
"tags": [
"fix",
"this",
"now"
],
"bespoke_fields": [
{
"id": 3800208,
"value": null
},
{
"id": 3600194,
"value": "bluesteel"
},
{
"id": 3700205,
"value": null
},
{
"id": 3100209,
"value": null
},
{
"id": 3200192,
"value": "fix-needed"
},
{
"id": 3300194,
"value": "mistakes"
}
],
"return_ids": [],
"identifier_id": 5482,
"customer_identifier": 5688,
"user_track": null,
"allow_files": true
},
这是当前的实现...我包括了papaparse库,并将其添加到我的页面中,其中“ requestData”是我的JSON变量:
function downloadCSV() {
var csv = Papa.unparse(requestData);
var csvData = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
var csvURL;
csvURL = window.URL.createObjectURL(csvData);
var referralLink = document.createElement('a');
referralLink.href = csvURL;
referralLink.setAttribute('download', 'downloadable.csv');
referralLink.click();
}
我想获得一个CSV,其中包含我提到的那12列以及JSON对象中的相应数据。
Sample SCV Output I'm looking for
这是我正在编写的函数的开头,该函数将JSON字段ID与实际名称匹配以放入CSV标头中。但是,我陷入了逻辑。
function appendData(requests) {
var fieldTypes = {
3600194: 'version',
3200192: 'request_type',
3300194: 'cause'
};