如何将所有JSON数据排序到纯TXT文件中

时间:2018-11-05 04:40:41

标签: json bash sorting jq

我想知道是否有人可以告诉我如何将以下JSON数据排序为纯文本?我尝试使用“ jq”和“ jsonv”(Linux应用程序),但是没有运气。

这是JSON数据:

{"@hrinn": {"host": {"1": " \"some.host.name\",", "2": " false,"}, "password": {"1": " \"123456\","}}},{"@hrinn": {"host": {"1": " \"another.host.name\",", "2": " false,""}, "password": {"1": " \"654321\","}}},{"@Abnerene": {"host": {"1": " \"example.com\",", "2": " false,"}, "username": {"1": " \"username\","}, "password": {"1": " \"password123\","}}

请注意,所有JSON数据都在同一行

预期结果将是:

hostname username password
host1.net johndoe q1w2e3
host2.com alex    qwerty
host3.org bob     123456  

任何帮助将不胜感激

谢谢

1 个答案:

答案 0 :(得分:1)

首先,您的示例json文件包含三个语法错误:

  • 文本结尾缺少左括号}
  • 在第二个对象中的 false 之后有一个额外的双引号。
  • 整个对象必须用方括号[]作为数组括起来。

然后,修改后的json文件将如下所示:

$ cat test.json
[
{"@hrinn": {"host": {"1": " \"some.host.name\",", "2": " false,"}, "password": {"1": " \"123456\","}}},
{"@hrinn": {"host": {"1": " \"another.host.name\",", "2": " false,"}, "password": {"1": " \"654321\","}}},
{"@Abnerene": {"host": {"1": " \"example.com\",", "2": " false,"}, "username": {"1": " \"username\","}, "password": {"1": " \"password123\","}}}
]

请注意,插入的换行符仅供人类阅读,与解析器无关。
现在您可以将json文件输入jq

$ jq -r '.[] | .[] | [.host["1"], .username["1"], .password["1"]] | @sh' test.json

产生:

' "some.host.name",' null ' "123456",'
' "another.host.name",' null ' "654321",'
' "example.com",' ' "username",' ' "password123",'

如果您的json文件中的值是正确的值,则结果看起来会更好。
希望这会有所帮助。