json - jq JSON 处理缺少的字段

标签 json jq

通常,我想做这样的事情,它有效:

echo '{"a": 123, "b": "{\"embedded\": 456}", "c": 789}' | jq '{a, "b2": .b | fromjson, c}' 
有效并产生:
{
  "a": 123,
  "b2": {
    "embedded": 456
  },
  "c": 789
}
有时,字段“b”丢失,在这种情况下,上面的 jq 会出错:
echo '{"a": 123, "c": 789}' | jq '{a, "b2": .b | fromjson, c}'
这给出了一个空错误,这是有道理的,因为 b 缺失所以 .b 为空,而 fromjson 错误为空。我想编写我的 jq 命令,所以如果记录中缺少 b,那么它就不会输出。我想简单地得到这个:
{
  "a": 123,
  "c": 789
}
我浏览了 jq 引用手册。我在使用 if/else/end 构造来解决这个问题时遇到了麻烦。我没有看到任何其他可用的空处理函数或语言结构。

最佳答案

有几种可能的方法,每种方法都有变体。以下是 build 性方法和后处理方法的说明。

build 性的

{a} + ((select(has("b")) | {"b2": .b | fromjson}) // {}) + {c}

或更简洁但语义略有不同:
[{a}, (select(.b) | {b2: .b | fromjson}), {c}] | add

后期处理
{a, "b2": (.b | fromjson? // null), c}
| if .b2 == null then del(.b2) else . end

关于json - jq JSON 处理缺少的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57069940/

相关文章:

python - 从Python中的多个字典返回结果

php - 返回对象数组的数组

yaml - yq 从键值对中获取值

json - 使用 jq 合并 2 个 JSON 对象

regex - jq 在第一个之后删除空格

java - 用于保存类(class)、学生和作业数据的 JSON

javascript - 为什么我的数组 json 是空的?

json - 如何过滤没有嵌套范围的嵌套 JSON 数据

json - 将带有空格的 JSON 通过管道传输到 bash 数组中的最佳方法是什么?

.net - 将 JSON 字符串反序列化为 VB.net 对象