使用 JQ 展平嵌套的 Json 对象



我正在创建一个脚本来将JSON对象转换为"字符串"文件(用于翻译目的(。 这个想法是转换:

{
"TRANSLATION1": "text1",
"TRANSLATION2": "text2"
}

"TRANSLATION1" = "text1";
"TRANSLATION2" = "text2";

这是通过以下方法完成的:jq -r 'to_entries|map(""(.key)"=(.value|tojson);")|.[]'

好!

现在,我的问题是嵌套对象:

{
"TRANSLATION1": "text1",
"TRANSLATION2": "text2",
"TRANSLATION3": {
"SUBTRANS1": "subtranslation1",
"SUBTRANS2": "subtranslation2",
}
}

我希望有这样的结果:

"TRANSLATION1" = "text1";
"TRANSLATION2" = "text2";
"TRANSLATION3.SUBTRANS1" = "subtranslation1";
"TRANSLATION3.SUBTRANS2" = "subtranslation2";

谁能帮忙?!我已经挠头好几个小时了...

一种方法是使用tostream

tostream
| select(length==2)
| (.[0] | join(".")) as $k
| .[1] as $v
| ""($k)" = "($v)";"

当与 -r 命令行选项一起使用时,这将产生所需的结果,假设输入是有效的 JSON。

检查关键假设 [*]

可能值得明确指出的是,如果任何键名包含句点,则输出格式可能不是很有用,因此可能值得检查是否确实如此,例如:

[.. | objects | keys_unsorted[]]
| map(select(index(".")))
| unique[]

如果您的 jq 没有tostream

paths as $path
| getpath($path) 
| strings
| ""($path|join("."))" = "(.)";"

[*] 双关语

相关内容

  • 没有找到相关文章

最新更新