打开命令的输出转换成有效的JSON? [关闭]

问题描述 投票:-2回答:3

我如何使用bash命令“kubectl集群信息转储”的输出转换为有效的JSON?

由于是,现在,它出来像这样(极其略):

{
    "selfLink": "/api/v1/nodes",
    "resourceVersion": "24393",
    "Items": [tons of json]
}
{
    "selfLink": "/api/v1/namespaces/default/events",
    "resourceVersion": "24393",
    "Items": [tons of json]
}
...
{
    "selfLink": "/api/v1/namespaces/default/pods",
    "resourceVersion": "24393",
    "Items": [tons of json]
}

我想通过awk或者sed管这个命令的输出到这个输出到有效的JSON翻译,是这样的:

[{"k","v","k2","v2"},
 {"k","v","k2","v2"},
 ...
 {"k","v","k2","v2"}]

我可以很容易使用JSON解析器像JQ解析

json bash awk sed
3个回答
1
投票

如果如所示的布局,则:

kubectl cluster-info dump |
{ echo "["; sed -e 's/^}$/},/' -e '$s/^},$/}/'; echo "]"; }

会做的工作。这依赖于“吨JSON”不是只有}中间包含的任何行。由于JSON解析器不能用空格和换行担心,没有必要做更多。

您可避免与外壳{ …; }符号:

kubectl cluster-info dump |
sed -e '1s/^/[/' -e 's/^}$/},/' -e '$s/^},$/}]/'

第一sed命令添加[到第一行的开始;每行包括只在第二个变化}},(包括最后一行),但第三撤销的损害,并增加了]代替。

你甚至可以结合这些-e命令到一个用分号隔开。就个人而言,我更喜欢单独-e选项,使其easer阅读。如果他们是更复杂的,我把每一个在其自己的行,用反斜杠继续多行全面指挥。


3
投票

管你的命令的输出

jq -s

0
投票

我想出了这个解决方案

kubectl cluster-info dump | sed "s/^}$/},/g" | tr '\n' "~" | sed 's/^/[/g' | sed 's/$/]/g' | tr "~" "\n"

其产生的可解析JSON结果

© www.soinside.com 2019 - 2024. All rights reserved.