首页 > 解决方案 > 如何从 json 文件中删除一个空对象

问题描述

我有一个看起来像这样的 json 文件:


[
    [
        [
            {
                "expand": "renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations",
                "id": "10000",
                "self": "https://test.atlassian.net/rest/api/latest/issue/10000",
                "key": "AGILE-1",
                    "components": [],
                    "timetracking": {}

            }
        ]
    ]
]

我想删除空数组,如时间跟踪和组件。

我在网上阅读了很多内容并尝试了不同的方法,但我只设法删除了 null 或空值,但删除了整个数组或对象。

这是我尝试过的:

cat $FilePathOrigin | jq-win64.exe -sc 'fromstream(tostream | select(length == 1 or .[1] != null))' > $FilePathDestiny

标签: arraysjsonpowershellobjectjq

解决方案


正如评论中所观察到的,您想要什么并不完全清楚,但是如果您想删除值等于 [] 或 {} 的键,那么您可以walk像这样使用:

walk(if type == "object" 
     then with_entries(if .value == {} or .value == [] then empty else . end) 
     else . end)

这也可以更简洁地写成:

walk(if type == "object" then with_entries(select(.value | (. != {} and . != []))) else . end)

如果您只想从特定对象中删除键,那么最简单的方法可能是with_entries如上所述使用。

关于警告length

length不仅在数组和对象上定义!


推荐阅读