Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jq-如何格式化键和值对,然后在json中迭代键_Json_Linux_Jq - Fatal编程技术网

jq-如何格式化键和值对,然后在json中迭代键

jq-如何格式化键和值对,然后在json中迭代键,json,linux,jq,Json,Linux,Jq,请帮帮我,伙计们。 我有以下资料: { "id": 88888, "name": "TESTING", "online": 1, "test_list": [ { "id": 0, "type": 34, "name": "Blabla", &qu

请帮帮我,伙计们。 我有以下资料:

{
  "id": 88888,
  "name": "TESTING",
  "online": 1,
  "test_list": [
    {
      "id": 0,
      "type": 34,
      "name": "Blabla",
      "used": 9870,
      "rate": 31768897891,
      "temp": 0,
      "percent": 100,
      "enabled": 0,
      "reset": 0,
      "temp": 2
    },
    {
      "id": 1,
      "type": 23,
      "name": "AlbAlb",
      "used": 0865,
      "rate": 317681675432345678951,
      "temp": 1,
      "percent": 99,
      "enabled": 0,
      "reset": 0,
      "target": 2
    },
    {
      "id": 2,
      "type": 98,
      "name": "TztS",
      "used": 65,
      "rate": 6324,
      "temp": 0,
      "percent": 80,
      "enabled": 0,
      "reset": 0,
      "target": 2
    }
  ],
  "info": {
    "version": "1.0",
    "no": "123",
    "sw": "321",
    "version_detail": {
      "date": "2021-03-30",
      "build": "11",
      "cot": "dfgdfgd"
    }
  }
}
[
  {
    "name": "TESTING",
    "online": 1
  },
  {
    "id0": 0,
    "type0": 34,
    "name0": "Blabla",
    "rate0": 31768897891,
    "temp0": 0,
    "percent0": 100
    "id1": 1,
    "type1": 23,
    "name1": "AlbAlb",
    "rate1": 317681675432345670000,
    "temp1": 1,
    "percent1": 99
    "id2": 2,
    "type2": 98,
    "name2": "TztS",
    "rate2": 6324,
    "temp2": 0,
    "percent2": 80
  }
]
我需要做以下工作:

{
  "id": 88888,
  "name": "TESTING",
  "online": 1,
  "test_list": [
    {
      "id": 0,
      "type": 34,
      "name": "Blabla",
      "used": 9870,
      "rate": 31768897891,
      "temp": 0,
      "percent": 100,
      "enabled": 0,
      "reset": 0,
      "temp": 2
    },
    {
      "id": 1,
      "type": 23,
      "name": "AlbAlb",
      "used": 0865,
      "rate": 317681675432345678951,
      "temp": 1,
      "percent": 99,
      "enabled": 0,
      "reset": 0,
      "target": 2
    },
    {
      "id": 2,
      "type": 98,
      "name": "TztS",
      "used": 65,
      "rate": 6324,
      "temp": 0,
      "percent": 80,
      "enabled": 0,
      "reset": 0,
      "target": 2
    }
  ],
  "info": {
    "version": "1.0",
    "no": "123",
    "sw": "321",
    "version_detail": {
      "date": "2021-03-30",
      "build": "11",
      "cot": "dfgdfgd"
    }
  }
}
[
  {
    "name": "TESTING",
    "online": 1
  },
  {
    "id0": 0,
    "type0": 34,
    "name0": "Blabla",
    "rate0": 31768897891,
    "temp0": 0,
    "percent0": 100
    "id1": 1,
    "type1": 23,
    "name1": "AlbAlb",
    "rate1": 317681675432345670000,
    "temp1": 1,
    "percent1": 99
    "id2": 2,
    "type2": 98,
    "name2": "TztS",
    "rate2": 6324,
    "temp2": 0,
    "percent2": 80
  }
]
我想将我需要的信息连接到块中,然后通过id或迭代设置密钥编号。 使用jq和man在同一条线上,是否有可能以某种方式实现这一点

经过很长一段时间,我只做到了以下几点:

{
  "id": 88888,
  "name": "TESTING",
  "online": 1,
  "test_list": [
    {
      "id": 0,
      "type": 34,
      "name": "Blabla",
      "used": 9870,
      "rate": 31768897891,
      "temp": 0,
      "percent": 100,
      "enabled": 0,
      "reset": 0,
      "temp": 2
    },
    {
      "id": 1,
      "type": 23,
      "name": "AlbAlb",
      "used": 0865,
      "rate": 317681675432345678951,
      "temp": 1,
      "percent": 99,
      "enabled": 0,
      "reset": 0,
      "target": 2
    },
    {
      "id": 2,
      "type": 98,
      "name": "TztS",
      "used": 65,
      "rate": 6324,
      "temp": 0,
      "percent": 80,
      "enabled": 0,
      "reset": 0,
      "target": 2
    }
  ],
  "info": {
    "version": "1.0",
    "no": "123",
    "sw": "321",
    "version_detail": {
      "date": "2021-03-30",
      "build": "11",
      "cot": "dfgdfgd"
    }
  }
}
[
  {
    "name": "TESTING",
    "online": 1
  },
  {
    "id0": 0,
    "type0": 34,
    "name0": "Blabla",
    "rate0": 31768897891,
    "temp0": 0,
    "percent0": 100
    "id1": 1,
    "type1": 23,
    "name1": "AlbAlb",
    "rate1": 317681675432345670000,
    "temp1": 1,
    "percent1": 99
    "id2": 2,
    "type2": 98,
    "name2": "TztS",
    "rate2": 6324,
    "temp2": 0,
    "percent2": 80
  }
]
jq'[.|{name,online}]+[.test|list[]{id,type,name,rate,temp,percent}}带有_条目(.key |=.+“0”)]


我尝试使用map工具,但它不起作用=((请帮助…

关键是
带有_条目
。一种可能是使用
减少

[ {name, online},
  (.test_list
   | . as $in
   | reduce range(0; length) as $i ({}; . + ($in[$i] | with_entries(.key = "\(.key)\($i)")))
   )
]

请注意,您的示例输出与JSON不太正确,而且对于您的示例输入,上面的jq程序产生的结果略有不同,但是如果您想删除某些键值对,您可以轻松地这样做,例如,作为管道中的一个初步步骤。

这里有一个无reduce的方法:它使用
和\u条目
在数组上执行计数:

[ {name, online},
  (.test_list
   | with_entries(.key |= tostring
         | .key as $k
         | .value |= with_entries(.key += $k))
   | add
  )
]

非常感谢!它真的很有效!您的第二个选项比第一个选项对我来说更清楚。)我敢缩短最终输出格式,并在您的版本中添加一点值对过滤器。Thanx,bro=)我仍然是json的高手,所以你的解决方案对我帮助很大,我将继续学习!这对我来说是一个完美的解决方案:{name,online}+([.test_list[]{id,type,name,rate,temp,percent}])带有_项(.key |=tostring |。key为$k |。value |=(带有_项(.key |=。+$k)))非常感谢!@breed_o_o-我很好奇,你找到了两个
的解决方案,其中包含
条目,更加清晰。另一方面,我想知道,如果你在这里重命名密钥,是否真的是实现你最终要做的事情的最佳方法……我可用的默认值由ap提供i、 所以我不能删除不需要的密钥。为了在jq之后过滤密钥,我必须执行许多不必要的操作,因为这些数据会立即加载到记帐系统=)