jq:在转换为 CSV 时编辑单个字段
jq: edit a single field while converting to CSV
简介
我已经研究并尝试了 2 天。我没有成功找到类似问题或自己找到答案。
我有以下 JSON 负载(来自 VRA API)
{ "content": [
{
"@type": "CatalogResource",
"id": "ccc",
"iconId": "xxx",
"resourceTypeRef": {
"id": "Infrastructure.Virtual",
"label": "Virtual Machine"
},
"name": "name01",
"description": "example01",
"status": "ACTIVE",
"catalogItem": {
"id": "xxxxx",
"label": "xxxxx"
},
"requestId": "xxxxx",
"providerBinding": {
"bindingId": "xxxx",
"providerRef": {
"id": "xxxxx",
"label": "xxxxx"
}
},
"owners": [
{
"tenantName": "xxxxx",
"ref": "xxxxxxxx",
"type": "USER",
"value": "xxxxxxxxx"
}
],
"organization": {
"tenantRef": "xxxx",
"tenantLabel": "xxxxxxx",
"subtenantRef": "xxxxxx",
"subtenantLabel": "xxxxxxxxx"
},
"dateCreated": "2015-10-05T08:58:35.133Z",
"lastUpdated": "2015-12-03T13:23:54.187Z",
"hasLease": true,
"lease": {
"start": "2015-10-05T08:21:31.000Z"
},
"leaseForDisplay": null,
"hasCosts": true,
"costs": {
"leaseRate": {
"type": "moneyTimeRate",
"cost": {
"type": "money",
"currencyCode": "GBP",
"amount": 99999
},
"basis": {
"type": "timeSpan",
"unit": "DAYS",
"amount": 1
}
}
},
"costToDate": {
"type": "money",
"currencyCode": "GBP",
"amount": 19181
},
"totalCost": null,
"childResources": [],
"operations": null,
"forms": {
"catalogResourceInfoHidden": true,
"details": {
"type": "extension",
"extensionId": "xxxxxx",
"extensionPointId": null
}
},
"resourceData": {
"entries": []
}
},
{
"@type": "CatalogResource",
"id": "ccc",
"iconId": "xxx",
"resourceTypeRef": {
"id": "Infrastructure.Virtual",
"label": "Virtual Machine"
},
"name": "name01",
"description": "this, is, my, problem",
"status": "ACTIVE",
"catalogItem": {
"id": "xxxxx",
"label": "xxxxx"
},
"requestId": "xxxxx",
"providerBinding": {
"bindingId": "xxxx",
"providerRef": {
"id": "xxxxx",
"label": "xxxxx"
}
},
"owners": [
{
"tenantName": "xxxxx",
"ref": "xxxxxxxx",
"type": "USER",
"value": "xxxxxxxxx"
}
],
"organization": {
"tenantRef": "xxxx",
"tenantLabel": "xxxxxxx",
"subtenantRef": "xxxxxx",
"subtenantLabel": "xxxxxxxxx"
},
"dateCreated": "2015-10-05T08:58:35.133Z",
"lastUpdated": "2015-12-03T13:23:54.187Z",
"hasLease": true,
"lease": {
"start": "2015-10-05T08:21:31.000Z"
},
"leaseForDisplay": null,
"hasCosts": true,
"costs": {
"leaseRate": {
"type": "moneyTimeRate",
"cost": {
"type": "money",
"currencyCode": "GBP",
"amount": 99999
},
"basis": {
"type": "timeSpan",
"unit": "DAYS",
"amount": 1
}
}
},
"costToDate": {
"type": "money",
"currencyCode": "GBP",
"amount": 19181
},
"totalCost": null,
"childResources": [],
"operations": null,
"forms": {
"catalogResourceInfoHidden": true,
"details": {
"type": "extension",
"extensionId": "xxxxxx",
"extensionPointId": null
}
},
"resourceData": {
"entries": []
}
}
]
}
我按如下方式将其转换为 CSV:
jq --raw-output -r '.content[0] | [.name,.id,.resourceTypeRef.label,.description,.status,.catalogItem.label,.owners[0].value,.dateCreated,.costs.leaseRate.cost.amount,.costToDate.amount] | @csv'
问题
我需要编辑 .description 字段并删除逗号。
我正在寻找一种 jq 的方法;我可以使用 sed 或 awk 在 shell 级别完成,但我想知道是否可以在同一命令中使用 jq我用来生成 CSV。
谢谢!!
您可以使用 gsub/2
使用正则表达式执行替换。所以对于描述部分,做替换。
(.description | gsub(","; ""))
简介
我已经研究并尝试了 2 天。我没有成功找到类似问题或自己找到答案。
我有以下 JSON 负载(来自 VRA API)
{ "content": [
{
"@type": "CatalogResource",
"id": "ccc",
"iconId": "xxx",
"resourceTypeRef": {
"id": "Infrastructure.Virtual",
"label": "Virtual Machine"
},
"name": "name01",
"description": "example01",
"status": "ACTIVE",
"catalogItem": {
"id": "xxxxx",
"label": "xxxxx"
},
"requestId": "xxxxx",
"providerBinding": {
"bindingId": "xxxx",
"providerRef": {
"id": "xxxxx",
"label": "xxxxx"
}
},
"owners": [
{
"tenantName": "xxxxx",
"ref": "xxxxxxxx",
"type": "USER",
"value": "xxxxxxxxx"
}
],
"organization": {
"tenantRef": "xxxx",
"tenantLabel": "xxxxxxx",
"subtenantRef": "xxxxxx",
"subtenantLabel": "xxxxxxxxx"
},
"dateCreated": "2015-10-05T08:58:35.133Z",
"lastUpdated": "2015-12-03T13:23:54.187Z",
"hasLease": true,
"lease": {
"start": "2015-10-05T08:21:31.000Z"
},
"leaseForDisplay": null,
"hasCosts": true,
"costs": {
"leaseRate": {
"type": "moneyTimeRate",
"cost": {
"type": "money",
"currencyCode": "GBP",
"amount": 99999
},
"basis": {
"type": "timeSpan",
"unit": "DAYS",
"amount": 1
}
}
},
"costToDate": {
"type": "money",
"currencyCode": "GBP",
"amount": 19181
},
"totalCost": null,
"childResources": [],
"operations": null,
"forms": {
"catalogResourceInfoHidden": true,
"details": {
"type": "extension",
"extensionId": "xxxxxx",
"extensionPointId": null
}
},
"resourceData": {
"entries": []
}
},
{
"@type": "CatalogResource",
"id": "ccc",
"iconId": "xxx",
"resourceTypeRef": {
"id": "Infrastructure.Virtual",
"label": "Virtual Machine"
},
"name": "name01",
"description": "this, is, my, problem",
"status": "ACTIVE",
"catalogItem": {
"id": "xxxxx",
"label": "xxxxx"
},
"requestId": "xxxxx",
"providerBinding": {
"bindingId": "xxxx",
"providerRef": {
"id": "xxxxx",
"label": "xxxxx"
}
},
"owners": [
{
"tenantName": "xxxxx",
"ref": "xxxxxxxx",
"type": "USER",
"value": "xxxxxxxxx"
}
],
"organization": {
"tenantRef": "xxxx",
"tenantLabel": "xxxxxxx",
"subtenantRef": "xxxxxx",
"subtenantLabel": "xxxxxxxxx"
},
"dateCreated": "2015-10-05T08:58:35.133Z",
"lastUpdated": "2015-12-03T13:23:54.187Z",
"hasLease": true,
"lease": {
"start": "2015-10-05T08:21:31.000Z"
},
"leaseForDisplay": null,
"hasCosts": true,
"costs": {
"leaseRate": {
"type": "moneyTimeRate",
"cost": {
"type": "money",
"currencyCode": "GBP",
"amount": 99999
},
"basis": {
"type": "timeSpan",
"unit": "DAYS",
"amount": 1
}
}
},
"costToDate": {
"type": "money",
"currencyCode": "GBP",
"amount": 19181
},
"totalCost": null,
"childResources": [],
"operations": null,
"forms": {
"catalogResourceInfoHidden": true,
"details": {
"type": "extension",
"extensionId": "xxxxxx",
"extensionPointId": null
}
},
"resourceData": {
"entries": []
}
}
]
}
我按如下方式将其转换为 CSV:
jq --raw-output -r '.content[0] | [.name,.id,.resourceTypeRef.label,.description,.status,.catalogItem.label,.owners[0].value,.dateCreated,.costs.leaseRate.cost.amount,.costToDate.amount] | @csv'
问题
我需要编辑 .description 字段并删除逗号。
我正在寻找一种 jq 的方法;我可以使用 sed 或 awk 在 shell 级别完成,但我想知道是否可以在同一命令中使用 jq我用来生成 CSV。
谢谢!!
您可以使用 gsub/2
使用正则表达式执行替换。所以对于描述部分,做替换。
(.description | gsub(","; ""))