我有一个JSON输出,我想修改一下:
JSON={"type":"global", "elements":[
{"type":"car","model":"bmw", "elements":[
{"type":"door", "number":"3"},
{...},
{...}]
}]
}
我需要将所有内容放在一行中:
JSON={"type":"global","elements":[{"type":"car","model":"bmw","elements":[{"type":"door","number":"3"},{...},{...}]}]}
我试过了:
JSON=`echo "${JSON}" | nawk 'sub(" *","",$0)'`
和此:
JSON=`echo "${JSON}" | sed 's/^[ \n\t]*//;s/[ \n\t]*$//'`
但是那些人帮助了我,结果是:
JSON={"type":"global", "elements":[ <--- the remaining space between key-value groups were also supposed to disappear, but they don't
{"type":"car","model":"bmw", "elements":[
{"type":"door", "number":"3"},
{...},
{...}]
}]
}
如果有人能帮我告诉我如何摆脱键值组之间的空间,我真的很感激。
答案 0 :(得分:7)
我似乎有点晚了。
嗯,对于它的价值,使用纯文本工具处理JSON与使用纯文本工具处理XML一样危险。在这种特殊情况下,例如,当JSON字符串包含空格时,您可能会遇到问题。
出于这个原因,我建议使用JSON处理工具,例如jq
:
JSON=$(echo "$JSON" | jq -c .)
jq
正确解析JSON并注意保留其含义,因此保证输出与输入具有相同的含义。
答案 1 :(得分:4)
使用awk,您可以使用OFS和ORS变量
awk -v ORS= -v OFS= '{$1=$1}1' file
答案 2 :(得分:2)
只需使用tr
删除它们:
$ tr -d '[\n\t ]' < file
JSON={"type":"global","elements":{"type":"car","model":"bmw","elements":{"type":"door","number":"3"},{...},{...}}}
来自man tr
:
-d , - 删除
删除SET1中的字符,不要翻译