我想通过以紧凑模式(-c)打印来压缩json文件的空间,但我想在每个根级对象之后添加新行.

例如,对于下面的对象

{
  "a": {
    "a1": 1,
    "a2": [
      null
    ]
  },
  "b": {
    "b1": "test"
  },
  "c": [
    1,
    2,
    3
  ]
}

我想把它印成

{
"a":{"a1":1,"a2":[null]},
"b":{"b1":"test"},
"c":[1,2,3]
}

即,每行一个根级别对象(添加开始/结束括号)

我使用以下命令在一行中打印了每一项

echo '{"a":{"a1":1, "a2":[null]}, "b": {"b1":"test"}, "c": [1,2,3]}' | jq -c -r '. | to_entries | .[] | "\"\(.key)\": \(.value)"'

"a": {"a1":1,"a2":[null]}
"b": {"b1":"test"}
"c": [1,2,3]

但是我不能形成一个有效的JSON对象.

有谁能给我提点建议吗? 谢谢

最新情况:

我使用JQ和Perl的组合设法实现了这一目标

echo '{"a":{"a1":1, "a2":[null]}, "b": {"b1":"test"}, "c": [1,2,3]}' | jq -c -r '. | to_entries | .[] | @json "\(.key): \(.value)"' | perl -pe 's/$/,/m if !eof' | perl -p0e 's/^/{\n/' | perl -p0e 's/$/\n}/'

推荐答案

JQ如何做漂亮的印刷,你的 Select 非常有限. 你最好的 Select 就是写你自己的.这是一个非常手动的方法,使用to_entries@json

jq -r '
  "{", ([to_entries[] | @json "\(.key):\(.value)"] | .[:-1][] += ",")[], "}"
'
{
"a":{"a1":1,"a2":[null]},
"b":{"b1":"test"},
"c":[1,2,3]
}

Demo

Json相关问答推荐

解析JSON说函数parse_json不存在?

如何在VB6中将字符串转换或解码为可读格式?

使用 jolt 变换展平嵌套 JSON - 非常复杂

使用 Powershell,如何将 Azure AD 组成员转换为 Json 对象(文件),然后可以更新?

使用 jq 工具将文本从 txt 文件转换为 json

如何使用 jq 在连续的 json 记录流上调用操作

如何在 Apps 脚本中循环遍历 JSON 响应

将请求中的数据推送到数组中

我无法将来自 API 的数据显示到 FlatList 中,但我在 console.log 中看到了它.问题是什么?

使用 jq 获取特定键的所有父键

如何在linux中用jq过滤json数组?

下一个 Js 部署在 getStaticPath 函数上失败:在 JSON.parse 的位置 0 的 JSON 中出现意外的令牌 < 但在本地运行

向 JSON 文件添加注释

SwiftUI:如何使用 0 索引数组键为 JSON 添加类型

在 Perl Mojolicious 中呈现 JSON 时防止转义字符

JBuilder中未定义的局部变量或方法json

如何判断字符串是否为json格式

如何将有向无环图 (DAG) 存储为 JSON?

Retrofit2.0 得到 MalformedJsonException 而 json 似乎正确?

类型是接口或抽象类,不能实例化