我有一个json,目前使用select来获取只匹配一个条件的数据,我需要根据更多条件进行过滤.
例如:
.[] | select((.processedBarsVolume <= 5) && .processedBars > 0)
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
我有这个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?
尝试将CSV文件转换为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) 我有相当小的对象的巨大(~7GB)json数组.
是否有相对简单的方法来过滤这些对象而不将整个文件加载到内存中?
--stream选项看起来合适,但我无法弄清楚如何将[path,value]的流折叠到原始对象.
我使用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)
亲切的问候
安迪
我试图用来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) 使用jq到Concat的目录中的JSON文件.
该目录包含几十万个文件.
jq -s '.' *.json > output.json
返回文件列表太长的错误.有没有办法写这个使用一个将接收更多文件的方法?
我想用来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示例:
{
"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 文件,其中包含彼此相似但不相同的对象。所有对象都有一个主标识符,但对象内可能存在也可能不存在其他键。
我的问题:对于对象中的给定键,如果存在,如何打印出该值,如果不存在,如何打印出类似“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 …