use*_*819 17 csv shell perl json jq
我有以下JSON数据:
{"id":"111","case":"Y","custom":{"speech invoked":"no","input method":"hard","session ID":"420"}}
Run Code Online (Sandbox Code Playgroud)
如何使用jq将其转换为CSV格式,所以我的结果如下所示?
id,case,session Id,speech invoked,input method
111,Y,420,no,hard
Run Code Online (Sandbox Code Playgroud)
我尝试了以下,但它不起作用:
{(.id),(.case),(.custom."session Id"),(.custom."speech invoked"),(.custom."input method")}
Run Code Online (Sandbox Code Playgroud)
如果不可能,任何perl或shell解决方案都是值得赞赏的.
Oli*_*ert 22
在Joe Harris的回答的基础上,您可以使用@csv过滤器,以便在必要时正确引用和转义字符串:
jq -r '[.case, .custom."speech invoked", .custom."input method"] | @csv'
Run Code Online (Sandbox Code Playgroud)
Joe*_*ris 18
使用perl对我来说不是一个好的解决方案,但经过一些试验和错误后我发现你只需jq使用join()运算符即可.
首先创建所需输出的数组,然后使用逗号连接数组元素.
jq -r '[.case, .custom."speech invoked", .custom."input method"] | join(", ")'
Run Code Online (Sandbox Code Playgroud)
请享用.:)
Jef*_*ado 11
使用jq,您可以使用此过滤器:
with_entries(select(.key != "custom")) + .custom
| to_entries
| map(.key), map(.value)
| @csv
Run Code Online (Sandbox Code Playgroud)
请注意,以这种方式编写,无论属性的顺序如何,"自定义"属性最终都会写入.
使用 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14832 次 |
| 最近记录: |