识别带有空数组的 .json 文件?

识别带有空数组的 .json 文件?

我有一个包含多个 .json 文件的文件夹。有些文件带有空数组,示例文件:

{
"WarehouseActivity": []
}

除了上面显示的数据外,该文件没有其他数据。

我需要识别这些文件并将它们移动到错误文件夹中。任何关于如何解决这个问题的建议都会很棒。

谢谢,卡文

答案1

mkdir -p error_folder &&
for json in ./*.json; do
    if jq -e '.. | select(type == "array" and length == 0)' "$json" >/dev/null
    then
        mv "$json" error_folder/
    fi
done

这或多或少与罗马采取的方法相同他的回答,但使用不同的jq表达方式。

该表达式..|select(type == "array" and length == 0)将递归完整的 JSON 结构并选择其中所有零长度数组的位(任何位置、任何深度)。

如果select()成功,jq则将以零退出状态退出(成功),这意味着 JSON 文档在某处包含空数组(或者文件完全为空)。这会触发将文档移动到error_folder脚本中。


从下面的评论可以清楚地看出,用户只对数组感兴趣WarehouseActivity

我的代码经过修改后的jq表达式:

mkdir -p error_folder &&
for json in ./*.json; do
    if jq -e '.. | .WarehouseActivity? | select(type == "array" and length == 0)' "$json" >/dev/null
    then
        mv "$json" error_folder/
    fi
done

答案2

Jq将是处理/分析的正确工具JSON数据:

for f in *.json; do
    if jq -e 'keys_unsorted as $keys
              | ($keys | length == 1) 
                and .[($keys[0])] == []' "$f" > /dev/null; then
        mv "$f" error_dir/
    fi
done

相关内容