我正在尝试使用JQ将我的JSON转换为不同的结构。我能够实现我的新结构,但是如果它们在Source中不存在,我的客户想要删除字段,如果它们有空值,那么我得到的是空对象的字段。
当我迭代的时候,我能够得到新格式的结构。但更多的结构即将到来。
代码片段- https://jqplay.org/s/w2N_Ozg9Ag
JSON
{
"amazon": {
"activeitem": 2,
"createdDate": "2019-01-15T17:36:31.588Z",
"lastModifiedDate": "2019-01-15T17:36:31.588Z",
"user": "net",
"userType": "new",
"items": [
{
"id": 1,
"name": "harry potter",
"state": "sold",
"type": {
"branded": false,
"description": "artwork",
"contentLevel": "season"
}
},
{
"id": 2,
"name": "adidas shoes",
"state": null ,
"type": {
"branded": false,
"description": "Spprts",
"contentLevel": "season"
}
},
{
"id": 3,
"name": "watch",
"type": {
"branded": false,
"description": "walking",
"contentLevel": "special"
}
},
{
"id": 4,
"name": "adidas shoes",
"state": "in inventory",
"type": {
"branded": false,
"description": "running",
"contentLevel": "winter"
}
}
],
"product": {
"id": 4,
"name": "adidas shoes",
"source": "dealer",
"destination": "resident"
}
}
}
JQ查询:
.amazon | { userType: .userType, userName: .user, itemCatalog: (.items | map({ itemId: .id, name, state} )) }
预期响应:
{
"userType": "new",
"userName": "net",
"itemCatalog": [
{
"itemId": 1,
"name": "harry potter",
"state": "sold"
},
{
"itemId": 2,
"name": "adidas shoes"
},
{
"itemId": 3,
"name": "watch"
},
{
"itemId": 4,
"name": "adidas shoes",
"state": "in inventory"
}
]
}
使用我的查询,我将为具有空或空值的条目获取状态:。在这种情况下,我想隐藏字段本身。
发布于 2019-02-22 03:46:51
尝试这个JQ查询:
jq '.amazon| { userType: .userType, userName: .user, itemCatalog: [.items[] | {id: .id, name: .name, state: .state}]}'
警告:这不是null值的原因。这就是解决方案的一半。
发布于 2021-07-28 10:31:23
可怕的解决方案,查询后将其删除。一定有更好的办法吧?(我今天开始使用jq )
.amazon | { userType: .userType, userName: .user, itemCatalog: (.items | map({ itemId: .id, name, state} )) }| del(.itemCatalog[].state |select(. == null))
https://stackoverflow.com/questions/54814990
复制相似问题