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
从jq输出元素创建新的json字符串_Json_Jq - Fatal编程技术网

从jq输出元素创建新的json字符串

从jq输出元素创建新的json字符串,json,jq,Json,Jq,我的jq命令返回括号中的对象,但不带逗号分隔符。但是我想从中创建一个新的json字符串 此调用查找arr中包含FooItem的所有元素,然后从索引3处的嵌套数组返回text: jq '.arr[] | select(index("FooItem")) | .[3].texts' 在这个json上(原始的有更多的元素): 返回此输出: [ "aBarfoo", "avalue" ] [ "mybarfoo", "bValue" ] 但我想从这些对象创建一个新的json,如下所

我的jq命令返回括号中的对象,但不带逗号分隔符。但是我想从中创建一个新的json字符串

此调用查找
arr
中包含
FooItem
的所有元素,然后从索引
3
处的嵌套数组返回
text

jq '.arr[] | select(index("FooItem")) | .[3].texts' 
在这个json上(原始的有更多的元素):

返回此输出:

[
  "aBarfoo",
  "avalue"
]
[
  "mybarfoo",
  "bValue"
]
但我想从这些对象创建一个新的json,如下所示:

{
    "arr": [
        [
            "aBarfoo",
            "avalue"
        ],
        [
            "mybarfoo",
            "bValue"
        ]
    ]
}
jq能做到这一点吗

编辑

还有一个补充:考虑到文本也有长度为零的字符串,您将如何删除这些字符串/在结果中不删除它们

"texts": ["",
          "mybarfoo",
          "bValue",
          ""
          ]

通过对流进行修饰(即,在本例中,通过如下方式包装流),始终可以将(零个或多个)JSON实体的流嵌入到其他JSON结构中:

{ arr: [ STREAM ] }
但是,在本例中,我们也可以认为我们只是在编辑原始文档,并相应地使用
map(select(…)
idiom:

.arr |= map( select(index("FooItem")) | .[3].texts) 
后一种方法确保保留“arr”键的上下文

补遗 要过滤掉空字符串,只需添加另一个
映射(选择(…)


非常感谢。它起作用了!不过,我肯定要绞尽脑汁才能理解它。有没有办法在输出中重命名数组
arr
。使用第一种方法,只需指定替代名称。例如,使用第二种方法,您可以编写:
.newname=(.arr | map(…))| del(.arr)
Thank you@peak。我还有最后一个补充,但不想在评论中问这个问题,所以我对这个问题进行了编辑。也许你可以再帮我一次。谢谢你的补充!!
.arr |= map( select(index("FooItem")) | .[3].texts) 
.arr |= map( select(index("FooItem"))
             | .[3].texts | map(select(length>0)))