我正在尝试将一个大型JSON文件(〜4个Mio元素)拆分为单独的文件(每个元素一个文件)。
该文件有点像这样:
{
"books": [
{
"title": "Professional JavaScript - \"The best guide\"",
"authors": [
"Nicholas C. Zakas"
],
"edition": 3,
"year": 2011
},
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C.Zakas"
],
"edition": 2,
"year": 2009
},
{
"title": "Professional Ajax",
"authors": [
"Nicholas C. Zakas",
"Jeremy McPeak",
"Joe Fawcett"
],
"edition": 2,
"year": 2008
}
]
}
要将每本书分成一个单独的文件,我使用以下命令:
cat books.json | jq -c -M '.books[]' | while read line; do echo $line > temp/$(date +%s%N).json; done
对于最后两项,一切正常,因为书名不包含任何引号。但是,在第一个中,使用\"
get替换"
将导致损坏的JSON文件,因为后续的解析器-当然-将解释"
为元素的边界。
我尝试使用jq -r
,但这没有帮助。
我正在使用CentOS 7附带的jq版本:
[root@machine]$ jq --version
jq-1.6
有什么建议?
您必须使用以下-r
选项read
:
while read -r line; do echo "$line" > temp/"$(date +%s%N)".json; done
它防止解释反斜杠转义符。
并且您应该引用您的变量。
看到不同:
$ read var <<< 'quoted quotes: \"\"'
$ echo "$var"
quoted quotes: ""
$ read -r var <<< 'quoted quotes: \"\"'
$ echo "$var"
quoted quotes: \"\"
使用-r
withread
几乎总是您想要的,实际上应该是默认的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句