Arrays jq在/1中的行为不一致
以下示例来自按预期工作的项目--Arrays jq在/1中的行为不一致,arrays,jq,Arrays,Jq,以下示例来自按预期工作的项目-- $echo'[1,2]'|jq'映射(in([0,1])” [ 是的, 假的 ] 但是将值转换成字符串失败了- $echo'[“1”,“2”]| jq'映射(在([“0”,“1”])中) jq:error(at:1):无法检查数组是否有字符串键 为了确保这不是一个shell引用问题,我也尝试了-- $echo“[\'1\',\'2\']”“| jq”映射(在(['0',1]])” jq:error(at:1):无法检查数组是否有字符串键 此外,以下代码段也
$echo'[1,2]'|jq'映射(in([0,1])”
[
是的,
假的
]
但是将值转换成字符串失败了-
$echo'[“1”,“2”]| jq'映射(在([“0”,“1”])中)
jq:error(at:1):无法检查数组是否有字符串键
为了确保这不是一个shell引用问题,我也尝试了--
$echo“[\'1\',\'2\']”“| jq”映射(在(['0',1]])”
jq:error(at:1):无法检查数组是否有字符串键
此外,以下代码段也会失败,这可能是由于将0强制转换为布尔值false所致-
$echo'[0,1]'|jq'映射(in([1,2])”
[
是的,
真的
]
您误解了/1中的正在做什么。它不是测试值是否是数组的成员,而是测试值是否是对象键的成员。因此,对于数组,数字是预期的(索引),对于对象,字符串是预期的(键)。它与has/1
完全相同,但输入是交换的
$ jq -n '[0,-1,20,9,16,10] | map(in([range(20;30)]))' # 10 item array
[
true,
false,
false,
true,
false,
false
]
如果您想测试阵列中的成员资格,那么没有内置的,但您可以自己制作。虽然contains/1
很接近,但并不完全相同,因为它测试字符串是否为子字符串且不相等any/2
可用于执行此操作
def has_value($value):
any(.[]; . == $value);
def in_array($arr): # swapped input version
. as $value | any($arr[]; . == $value);
您误解了/1中的
正在做什么。它不是测试值是否是数组的成员,而是测试值是否是对象键的成员。因此,对于数组,数字是预期的(索引),对于对象,字符串是预期的(键)。它与has/1
完全相同,但输入是交换的
$ jq -n '[0,-1,20,9,16,10] | map(in([range(20;30)]))' # 10 item array
[
true,
false,
false,
true,
false,
false
]
如果您想测试阵列中的成员资格,那么没有内置的,但您可以自己制作。虽然contains/1
很接近,但并不完全相同,因为它测试字符串是否为子字符串且不相等any/2
可用于执行此操作
def has_value($value):
any(.[]; . == $value);
def in_array($arr): # swapped input version
. as $value | any($arr[]; . == $value);
index/1
是最方便用于检查数组成员资格的内置项。尽管它不是严格意义上的布尔值,if
和/
的语义使得它像布尔值一样易于使用。如果您想要一个严格的布尔测试,那么只需使用习惯用法index(33;)!=空
<>代码>索引/ 1 值得详细了解,因此请考虑对JQ手册和常见问题进行审查。还请注意,
INDEX/1
没有关系。INDEX/1
是最方便用于检查数组成员身份的内置项。尽管它不是严格意义上的布尔值,if
和/
的语义使得它像布尔值一样易于使用。如果您想要一个严格的布尔测试,那么只需使用习惯用法index(33;)!=空
<>代码>索引/ 1 值得详细了解,因此请考虑对JQ手册和常见问题进行审查。还要注意的是,索引/1
没有任何关系。实际上似乎做到了这一点(显然是在v1.5中添加的)
产生
[
false,
false,
false,
true,
false,
true,
false,
false
]
实际上似乎确实做到了这一点(显然是在v1.5中添加的)
产生
[
false,
false,
false,
true,
false,
true,
false,
false
]
我现在明白了。然而,我对中的
应用于数组的方式感到不太舒服。我同意,我更希望它的行为像
中的操作符一样,因为其他语言通常会定义它(如python或SQL),但它更接近javascript的行为。我还建议任何需要使用jeff配方的人,那在
中是一个好名字,可以用来代替数组中的。我现在明白了。然而,我对
中的应用于数组的方式感到不太舒服。我同意,我更希望它的行为像
中的操作符一样,因为其他语言通常会定义它(如python或SQL),但它更接近javascript的行为。我还建议任何需要使用jeff配方的人,在
中是一个很好的名称,可以用来代替数组中的。