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配方的人,
中是一个很好的名称,可以用来代替数组中的