我有以下JSON数据:
{"id":"111","case":"Y","custom":{"speech invoked":"no","input method":"hard","session ID":"420"}}
如何使用jq将其转换为CSV格式,使我的结果如下所示?
id,case,session Id,speech invoked,input method
111,Y,420,no,hard
我尝试了以下方法,但不起作用:
{(.id),(.case),(.custom."session Id"),(.custom."speech invoked"),(.custom."input method")}
如果不可行,欢迎使用任何perl或shell解决方案。
发布于 2014-08-29 07:05:15
使用Perl及其JSON模块:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use JSON;
my $input = << '__JSON__';
{"id":"111","case":"Y","custom":{"speech invoked":"no","input method":"hard","session ID":"420"}}
__JSON__
my $struct = decode_json($input);
my @header = grep ! ref $struct->{$_}, keys %$struct;
push @header, map keys %{ $struct->{$_} },
grep ref $struct->{$_},
keys %$struct;
my @row = grep ! ref, values %$struct;
push @row, map values %$_, grep ref, values %$struct;
say join ',', @header;
say join ',', @row;
发布于 2015-07-02 17:41:48
基于Joe Harris的回答,您可以使用@csv筛选器,以便在需要时正确引用和转义字符串:
jq -r '[.case, .custom."speech invoked", .custom."input method"] | @csv'
发布于 2014-11-08 05:29:48
使用perl对我来说不是一个很好的解决方案,但是经过一些试验和错误之后,我发现只要使用jq
和join()
操作符就可以做到这一点。
首先生成所需输出的数组,然后使用逗号连接数组元素。
jq -r '[.case, .custom."speech invoked", .custom."input method"] | join(", ")'
好好享受吧。:)
https://stackoverflow.com/questions/25558456
复制相似问题