首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用JQ在JSON转换中有条件地添加字段

使用JQ在JSON转换中有条件地添加字段
EN

Stack Overflow用户
提问于 2019-02-22 03:40:54
回答 2查看 217关注 0票数 2

我正在尝试使用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"
                }
              ]
            }

使用我的查询,我将为具有空或空值的条目获取状态:。在这种情况下,我想隐藏字段本身。

EN

回答 2

Stack Overflow用户

发布于 2019-02-22 03:46:51

尝试这个JQ查询:

jq '.amazon| { userType: .userType, userName: .user, itemCatalog: [.items[] | {id: .id, name: .name, state: .state}]}'  

警告:这不是null值的原因。这就是解决方案的一半。

Demo

票数 -1
EN

Stack Overflow用户

发布于 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://jqplay.org/s/jlNYmJNi25

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54814990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档