我有一个类似于JSON的平面文件(不完全相同)。 最后的动机是将其转换为CSV(按特定顺序,与输入JSON文件不同)和转储到数据库中。现在因为输入文件并不总是以相同的顺序AWK,cut等不会有用。需要像HASHMAP这样的东西。附加样本输入和预期输出。建议请。
输入JSON文件样本(我有1000个文件,每个50K行,每个200列)
{"Field1":{"string":"Value,123"},"Field2":{"string":"564243"},"Field3":{"string":"SWCHP0001155"},"LOCATION":null,"OWNERUID":{"string":"655,,34"}}
{"Field1":{"string":"Value,456"},"Field2":{"string":"89565655"},"Field3":{"string":"SWCHP0001166"},"LOCATION":{"string":"BEACH,"},"OWNERUID":{"string":"65534"}}
........
输出CSV文件按特定顺序排序,按顺序说(OWNERUID,LOCATION,Field1,Field2,Field3)
655;;34,null,Value;123,564243,SWCHP0001155
65534,BEACH;,Value;456,89565655,SWCHP0001166
到目前为止我的想法是做一些字符串操作改变eveything一个标准格式如下,将数据传输到hashmap,fetch in required和dump in CSV
中级标准格式:(可以更改,请提示)
Field1?Value;123,Field2?564243,Field3?SWCHP0001155,LOCATION?null,OWNERUID?655;;34
Field1?Value;456,Field2?89565655,Field3?SWCHP0001166,LOCATION?BEACH;,OWNERUID?65534
........
请注意:
答案 0 :(得分:1)
jq是一个旨在处理JSON字符串的C工具。它充当过滤器(或过滤器链),一次处理一个输入并具有相当不错的文档。它可能在您的发行版中可用,或假装从源代码构建,除了C编译器之外没有任何依赖性。在您的示例中,这应该足够了:
$ cat file.json | jq '[.OWNERUID.string, .LOCATION.string?, .Field1.string?, .Field2.string?, .Field3.string?]|join(";")'
"655,,34;;Value,123;564243;SWCHP0001155"
"65534;BEACH,;Value,456;89565655;SWCHP0001166"
$
或者如果你想摆脱封闭的引号,sed过滤器可以删除它们:
$ cat ess.txt | jq '[.OWNERUID.string, .LOCATION.string?, .Field1.string?, .Field2.string?, .Field3.string?]|join(";")' | sed -e 's/^"\(.*\)"$/\1/'
655,,34;;Value,123;564243;SWCHP0001155
65534;BEACH,;Value,456;89565655;SWCHP0001166
$