验证 JSON 个字段的排序顺序
Validate JSON fields sort order
我在容器中存储了以下 JSON 条记录
{"memberId":123,"memberCity":"Chicago","lastTransaction":1504155600000}
{"memberId":123,"memberCity":"Chigago","lastTransaction":150175600000}
{"memberId":123,"memberCity":"New York","lastTransaction":150195600000}
我希望验证存储这些记录的排序顺序是否按 memberId ASC、memberCity ASC、lastTransaction ASC 排序
有没有一种方法可以通过 jq 断言 (true/false) 排序顺序,同时考虑多个字段?
这是一个相当有效的解决方案,其呈现方式有望使其易于理解和适应:
def sorted:
if length <= 1 then true
else map([.memberId, .memberCity, .lastTransaction])
| .[0] <= .[1]
end;
def pairs(stream):
foreach stream as $i ([];
.[-1:] + [$i];
select(length==2));
all(pairs(inputs); sorted)
调用:
jq -n -f sorted.jq input.json
如果星星对齐正确并且您想要单线:
jq 'all(foreach [inputs[]] as $i ([[.[]]]; [.[-1],$i]); .[0]<=.[1])' input.json
调味。
任何需要使用 -s 命令行选项的解决方案都存在需要比实际需要更多内存的缺点。类似地,通常不建议使用 sort
,但如果想要一种简洁明了的解决方案,可以使用:
jq -s 'map([.memberId, .memberCity, .lastTransaction]) | . == sort'
甚至在给定的特定情况下:
jq -s 'map(.[]) | . == sort'
我在容器中存储了以下 JSON 条记录
{"memberId":123,"memberCity":"Chicago","lastTransaction":1504155600000}
{"memberId":123,"memberCity":"Chigago","lastTransaction":150175600000}
{"memberId":123,"memberCity":"New York","lastTransaction":150195600000}
我希望验证存储这些记录的排序顺序是否按 memberId ASC、memberCity ASC、lastTransaction ASC 排序
有没有一种方法可以通过 jq 断言 (true/false) 排序顺序,同时考虑多个字段?
这是一个相当有效的解决方案,其呈现方式有望使其易于理解和适应:
def sorted:
if length <= 1 then true
else map([.memberId, .memberCity, .lastTransaction])
| .[0] <= .[1]
end;
def pairs(stream):
foreach stream as $i ([];
.[-1:] + [$i];
select(length==2));
all(pairs(inputs); sorted)
调用:
jq -n -f sorted.jq input.json
如果星星对齐正确并且您想要单线:
jq 'all(foreach [inputs[]] as $i ([[.[]]]; [.[-1],$i]); .[0]<=.[1])' input.json
调味。
任何需要使用 -s 命令行选项的解决方案都存在需要比实际需要更多内存的缺点。类似地,通常不建议使用 sort
,但如果想要一种简洁明了的解决方案,可以使用:
jq -s 'map([.memberId, .memberCity, .lastTransaction]) | . == sort'
甚至在给定的特定情况下:
jq -s 'map(.[]) | . == sort'