gpt4 book ai didi

json - 如何从 json 对象中获取格式化的 json 字符串?

转载 作者:行者123 更新时间:2023-12-05 02:18:34 26 4
gpt4 key购买 nike

我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知道 JSON 不支持换行符,但我希望将它们替换为 \n 字符,这样当使用数据时,它不会全是一行。

有办法吗?

例子:

{
"test": {
"name": "test",
"description": "blah"
},
"test2": {
"name": "test2",
"description": "blah2"
}
}

成为

"{\"test\":{\"name\":\"test\",\"description\":\"blah\"},\"test2\":{\"name\":\"test2\",\"description\":\"blah2\"}}"

但我希望它看起来像

{\n  \"test\": {\n    \"name\": \"test\",\n    \"description\": \"blah\"\n  },\n  \"test2\": {\n    \"name\": \"test2\",\n    \"description\": \"blah2\" \n  }\n}

我实际上只是将它转换为 JSON 字符串,以便它能够作为另一个 JSON 的一部分发布。什么时候发布,我希望它有它原来的格式,如果有\n 个字符就可以实现。

我可以通过以下方式手动完成此操作

cat 文件 | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' | sed 's/\"/\\"/g')

但这并不理想。

最佳答案

tojson(或其他 json 输出过滤器)不会格式化 json。它将采用通常的紧凑形式。有一个 feature request在那里,所以在未来的版本中注意这一点。

您可以利用 jq 的常规范式化输出,但您需要对其进行字符串化。您可以通过输入原始输入(格式化输出)来模拟字符串化。这会将所有输入作为单个字符串读入。由于输入只是一个 json 对象,它会生成该对象的字符串表示形式。

如果你不介意额外的 jq 调用,你可以这样做:

$ var=$(jq '.' input.json | jq -sR '.')
$ echo "$var"
"{\n \"test\": {\n \"name\": \"test\",\n \"description\": \"blah\"\n },\n \"test2\": {\n \"name\": \"test2\",\n \"description\": \"blah2\"\n }\n}\n"

当然,如果您的输入已经格式化,您可以省略第一个 jq 调用。

关于json - 如何从 json 对象中获取格式化的 json 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45069839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com