Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Arrays jq解析json问题无法使其循环_Arrays_Json_Bash_Jq - Fatal编程技术网

Arrays jq解析json问题无法使其循环

Arrays jq解析json问题无法使其循环,arrays,json,bash,jq,Arrays,Json,Bash,Jq,获取身份证 $ cat sax.json | jq '.sax[] | select(.name | contains("mex"))' | jq .id "e49887" "e6de26" "6cc093" "89e0fe" 自行车坏了。 请帮忙 在第一个查询中,不需要调用jq两次;您还可以避免UOOC:

获取身份证

$ cat sax.json | jq  '.sax[] | select(.name | contains("mex"))' | jq .id

"e49887"
"e6de26"
"6cc093"
"89e0fe"
自行车坏了。 请帮忙

  • 在第一个查询中,不需要调用jq两次;您还可以避免UOOC:
  • 为了使shell变量的值可供jq使用,通常最好使用--arg或--argjson命令行选项。在您的例子中,您希望使用--argjson,因为$i已经包含了引号:
    jq--argjson i“$i”…

  • 或者,您可以使用
    jq-r
    设置数组内容,去掉引号,然后使用
    --argi“$i”

  • 包含的
    的语义相当复杂;通常,要检查一个字符串是否是另一个字符串的子字符串,最好使用
    startswith
    index
    test
    ,或类似的方法(视情况而定)

  • 所以
    jq
    不能在循环中使用?
    foreach?

    你好!除了提供代码外,用叙述介绍问题也是非常有用的。我可以建议您在快速回顾这些有用的建议后修改您的问题吗?请注意,
    array=($(任何内容))
    是一种反模式,不应该这样做。看见对于bash4.x或更高版本,使用
    readarray-tarray<这并不是一个完整的答案。您是否可以对此进行扩展,或者从问题中复制代码并对其进行修改以使其按预期工作?
    
    $ cat sax.json | jq  '.sax[] | select(.name | contains("mex"))' | jq .id
    
    "e49887"
    "e6de26"
    "6cc093"
    "89e0fe"
    
    #!/bin/bash
    
    declare -a array=($(jq .sax[].name sax.json ))
    
    for i in "${array[@]}"
      do  cat sax.json | jq '.sax[] | select(.name | contains($i))' | jq .id
    done
    
    < sax.json jq '.sax[] | select(.name | contains("mex")) | .id' 
    
    jq --argjson i "$i"