小编jq1*_*727的帖子

JQ:选择多个条件

我有一个json,目前使用select来获取只匹配一个条件的数据,我需要根据更多条件进行过滤.

例如:

.[] | select((.processedBarsVolume <= 5) && .processedBars > 0)
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

json jq

80
推荐指数
2
解决办法
4万
查看次数

使用jq在json中搜索正则表达式

我有这个json,我想获得适合变量子网的相应子网的id.

subnet="192.168.112"
json='{
  "subnets": [
    {
      "cidr": "192.168.112.0/24",
      "id": "123"
    },
    {
      "cidr": "10.120.47.0/24",
      "id": "456"
    }
  ]
}'
Run Code Online (Sandbox Code Playgroud)

由于jq不支持正则表达式.我发现获得正确id的唯一方法是混合grep,sed和jq,如下所示:

tabNum=$((`echo ${json} | jq ".subnets[].cidr" | grep -n "$subnet" | sed "s/^\([0-9]\+\):.*$/\1/"` - 1))
NET_ID=`echo ${json} | jq -r ".subnets[${tabNum}].id"`
Run Code Online (Sandbox Code Playgroud)

有没有办法只使用jq获取id?

regex bash json jq

19
推荐指数
1
解决办法
2万
查看次数

在bash中将CSV转换为JSON

尝试将CS​​V文件转换为JSON

这是两个示例行:

-21.3214077;55.4851413;Ruizia cordata
-21.3213078;55.4849803;Cossinia pinnata
Run Code Online (Sandbox Code Playgroud)

我想得到类似的东西:

"occurrences": [
                 {
                "position": [-21.3214077, 55.4851413],
                "taxo": {
                    "espece": "Ruizia cordata"
                 },
                 ...
             }]
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

    echo '"occurences": [ '

cat se.csv | while read -r line
  do
      IFS=';' read -r -a array <<< $line;
      echo -n -e '{ "position": [' ${array[0]}
      echo -n -e ',' ${array[1]} ']'
      echo -e ', "taxo": {"espece":"' ${array[2]} '"'
done
echo "]";
Run Code Online (Sandbox Code Playgroud)

我得到了非常奇怪的结果:

   "occurences": [ 
 ""position": [ -21.3214077, 55.4851413 ], "taxo": {"espece":" Ruizia cordata
 ""position": [ -21.3213078, 55.4849803 …
Run Code Online (Sandbox Code Playgroud)

unix csv bash json jq

14
推荐指数
6
解决办法
1万
查看次数

使用jq处理巨大的json数组文件

我有相当小的对象的巨大(~7GB)json数组.

是否有相对简单的方法来过滤这些对象而不将整个文件加载到内存中?

--stream选项看起来合适,但我无法弄清楚如何将[path,value]的流折叠到原始对象.

json jq

13
推荐指数
1
解决办法
5770
查看次数

如何按字母顺序获取jq到漂亮的打印json排序键

我使用jq来打印非常复杂的json.然后使用diff来比较不同的版本.有没有办法让jq按键按字母顺序排序?

更快的xml对象映射器支持这一点

prettyPrintObjectMapper = new ObjectMapper();
prettyPrintObjectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); //turn on
prettyPrintObjectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);

String tmp1 = prettyPrintObjectMapper.writeValueAsString(myObject);
Run Code Online (Sandbox Code Playgroud)

亲切的问候

安迪

json jq

10
推荐指数
1
解决办法
2038
查看次数

使用jq使用变量键构造JSON

我试图用来jq构造一个哈希,其中一个键名来自一个变量.像这样的东西:

jq --null-input --arg key foobar '{$key: "value"}'
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,并给出以下错误:

error: syntax error, unexpected '$'
{$key: "value"} 1 compile error
Run Code Online (Sandbox Code Playgroud)

json jq

9
推荐指数
1
解决办法
3417
查看次数

使用jq组合json文件,获取文件列表长度太长的错误

使用jq到Concat的目录中的JSON文件.

该目录包含几十万个文件.

jq -s '.' *.json > output.json

返回文件列表太长的错误.有没有办法写这个使用一个将接收更多文件的方法?

linux json jq

7
推荐指数
1
解决办法
4948
查看次数

jq:根据对象值条件递归删除对象的最简单方法

我想用来jq删除 JSON“对象”中的所有字典(我通常使用该术语来指代数组或字典)

a) 包含名为“delete_me”的键,并且 b) 其中键“delete_me”满足某些预定条件(空、非零、真等)

基本上,我想要实现的逻辑是:遍历输入,在每个节点上,如果该节点不是数组或对象,则保留它并继续,否则,保留它但从中删除任何属于字典的子节点条件 a) 或 b) 失败。

有什么建议么?

输入示例:

{
  "a": { "foo": "bar" },
  "b": {
    "i": {
      "A": {
        "i": [
          {
            "foo": {},
            "bar": {
              "delete_if_this_is_null": false,
              "an_array": [],
              "another_array": [
                {
                    "delete_if_this_is_null": null,
                    "foo": "bar"
                }
              ],
              "etc": ""
            },
            "foo2": "s"
          },
          {
            "foo": {
              "an_array": [
                {
                  "delete_if_this_is_null": "ok",
                  "foo":"bar",
                  "another_object": { "a":1 }
                },
                {
                  "delete_if_this_is_null": null,
                  "foo2":"bar2",
                  "another_object": { "a":1 },
                  "name": null
                }
              ],
              "an_object": …
Run Code Online (Sandbox Code Playgroud)

json jq

7
推荐指数
1
解决办法
6899
查看次数

有条件地根据另一个键的值打印值

这是一些JSON示例:

{
  "Tags": [
    {
      "Key": "Name",
      "Value": "foo"
    },
    {
      "Key": "Type",
      "Value": "C"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想仅在"Key"为"Type"时才打印"Value"的值.所以它应该打印出"C".这就是我到目前为止所拥有的.

echo $MY_TAGS | jq 'if .Tags[].Key == "Type" then .Tags[].Value else empty end'
Run Code Online (Sandbox Code Playgroud)

但它打印出来:

"foo"
"C"

有没有办法做到这一点?

json jq

6
推荐指数
1
解决办法
2792
查看次数

使用 JQ 判断密钥存在或不存在

我有一个 JSON 文件,其中包含彼此相似但不相同的对象。所有对象都有一个主标识符,但对象内可能存在也可能不存在其他键。

我的问题:对于对象中的给定键,如果存在,如何打印出该值,如果不存在,如何打印出类似“NA”的内容,无论哪种方式都打印该键的原始名称?

输入示例:

  {
      "DBInstances": [
          {
              "Identifier": 101,
              "foo": "some_value",
              "bar": 60,
              "Model": "A"
          },
          {
              "Identifier": 102,
              "foo": "some_value",
              "Model": "B"
          }
      ]
  }
Run Code Online (Sandbox Code Playgroud)

期望的输出:

          {
              "Identifier": 101,
              "foo": "some_value",
              "bar": 60,
              "Model": "A"
          },
          {
              "Identifier": 102,
              "foo": "some_value",
              "bar": "NA",
              "Model": "B"
          }
Run Code Online (Sandbox Code Playgroud)

我创建了一个函数,它(部分)适用于不存在,但根本不适用于存在:

  def exist(element):
     if (has( element ) == true)
     then { element: "true" }
     else { element: "NA" }
     end;
Run Code Online (Sandbox Code Playgroud)

当我用以下方式调用它时:

 exist( "bar" )
Run Code Online (Sandbox Code Playgroud)

“存在”部分是完全错误的,因为 JQ 打印“element”和“true”而不是原始键名称和值。

对于“不存在”的部分,JQ 打印“NA”就可以了,但是“element”而不是原始的键名称。

我正在使用 JQ …

json jq

6
推荐指数
1
解决办法
7450
查看次数

标签 统计

jq ×10

json ×10

bash ×2

csv ×1

linux ×1

regex ×1

unix ×1