diff --git a/src/builtin.jq b/src/builtin.jq index c608555227..dc9f3772bc 100644 --- a/src/builtin.jq +++ b/src/builtin.jq @@ -12,24 +12,24 @@ def add: reduce .[] as $x (null; . + $x); def del(f): delpaths([path(f)]); def _assign(paths; $value): reduce path(paths) as $p (.; setpath($p; $value)); def _modify(paths; update): - reduce path(paths) as $p (.; + reduce path(paths) as $p ([., []]; . as $dot | null | label $out - | ($dot | getpath($p)) as $v + | ($dot[0] | getpath($p)) as $v | ( ( $$$$v | update | (., break $out) as $v | $$$$dot - | setpath($p; $v) + | setpath([0] + $p; $v) ), ( $$$$dot - | delpaths([$p]) + | setpath([1]; .[1] + [$p]) ) ) - ); + ) | . as $dot | $dot[0] | delpaths($dot[1]); def map_values(f): .[] |= f; # recurse diff --git a/tests/jq.test b/tests/jq.test index 8a7ccc0eeb..55a0e3b267 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1048,6 +1048,11 @@ def inc(x): x |= .+1; inc(.[].a) {"a":[{"b":5}]} {"a":[{"c":3,"b":5}]} +# #2051, deletion using assigning empty against arrays +(.[] | select(. >= 2)) |= empty +[1,5,3,0,7] +[1,0] + .[2][3] = 1 [4] [4, null, [null, null, null, 1]]