首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQ:按照stedolan JQ库过滤json数组

JQ:按照stedolan JQ库过滤json数组
EN

Stack Overflow用户
提问于 2022-07-20 08:17:19
回答 1查看 57关注 0票数 -1

我在JQ图书馆很新。这是收到的响应:

代码语言:javascript
复制
{"message":"Details fetched successfully","status":1,"details":[{"test":"a","amount":2500.0,"pre":["11","429393","543216","987657"]},{"test":"b","amount":1500.0,"pre":["480855"]},{"test":"c","amount":0.0,"pre":["No data present"]},{"test":"d","amount":1500.0,"pre":["526702"]},{"test":"e","amount":2500.0,"pre":["No data present"]}]}

应用JQ过滤器后所需的输出:

代码语言:javascript
复制
  {
  "msg": "Details fetched successfully",
  "status": 1,
  "details": {
      "a": {
        "amount": 2500,
        "pre": [
          "11",
          "429393",
          "543216",
          "987657"
        ]
      },
      "b": {
        "amount": 1500,
        "pre": [
          "480855"
        ]
      },
      "c": {
        "amount": 0,
        "pre": [
          "No data present"
        ]
      },
      "d": {
        "amount": 1500,
        "pre": [
          "526702"
        ]
      },
      "e": {
        "amount": 2500,
        "pre": [
          "No data present"
        ]
      }
  }
}

我尝试使用下面的JQ过滤器,但我得到的“细节”作为数组,但“细节”是对象的最终输出。

JQ过滤器:

代码语言:javascript
复制
{msg: .message, status: .status, details: [.details[]| { (.test) : {amount: .amount, pre: .pre }}]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-20 08:45:12

INDEX可以根据子表达式将数组转换为具有键的对象:

代码语言:javascript
复制
jq '.details |= INDEX(.test)' 
代码语言:javascript
复制
{
  "message": "Details fetched successfully",
  "status": 1,
  "details": {
    "a": {
      "test": "a",
      "amount": 2500,
      "pre": [
        "11",
        "429393",
        "543216",
        "987657"
      ]
    },
    "b": {
      "test": "b",
      "amount": 1500,
      "pre": [
        "480855"
      ]
    },
    "c": {
      "test": "c",
      "amount": 0,
      "pre": [
        "No data present"
      ]
    },
    "d": {
      "test": "d",
      "amount": 1500,
      "pre": [
        "526702"
      ]
    },
    "e": {
      "test": "e",
      "amount": 2500,
      "pre": [
        "No data present"
      ]
    }
  }
}

演示

要从结果中删除test字段,在结果对象上使用map_valuesdel

代码语言:javascript
复制
jq '.details |= (INDEX(.test) | map_values(del(.test)))'
代码语言:javascript
复制
{
  "message": "Details fetched successfully",
  "status": 1,
  "details": {
    "a": {
      "amount": 2500,
      "pre": [
        "11",
        "429393",
        "543216",
        "987657"
      ]
    },
    "b": {
      "amount": 1500,
      "pre": [
        "480855"
      ]
    },
    "c": {
      "amount": 0,
      "pre": [
        "No data present"
      ]
    },
    "d": {
      "amount": 1500,
      "pre": [
        "526702"
      ]
    },
    "e": {
      "amount": 2500,
      "pre": [
        "No data present"
      ]
    }
  }
}

演示

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

https://stackoverflow.com/questions/73048140

复制
相关文章

相似问题

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