首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用jq将JSON转换为CSV?

如何使用jq将JSON转换为CSV?
EN

Stack Overflow用户
提问于 2014-08-29 05:38:31
回答 5查看 15.8K关注 0票数 18

我有以下JSON数据:

代码语言:javascript
复制
{"id":"111","case":"Y","custom":{"speech invoked":"no","input method":"hard","session ID":"420"}}

如何使用jq将其转换为CSV格式,使我的结果如下所示?

代码语言:javascript
复制
id,case,session Id,speech invoked,input method

111,Y,420,no,hard

我尝试了以下方法,但不起作用:

代码语言:javascript
复制
{(.id),(.case),(.custom."session Id"),(.custom."speech invoked"),(.custom."input method")}

如果不可行,欢迎使用任何perl或shell解决方案。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-29 07:05:15

使用Perl及其JSON模块:

代码语言:javascript
复制
#!/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;
票数 0
EN

Stack Overflow用户

发布于 2015-07-02 17:41:48

基于Joe Harris的回答,您可以使用@csv筛选器,以便在需要时正确引用和转义字符串:

代码语言:javascript
复制
jq -r '[.case, .custom."speech invoked", .custom."input method"] | @csv'
票数 22
EN

Stack Overflow用户

发布于 2014-11-08 05:29:48

使用perl对我来说不是一个很好的解决方案,但是经过一些试验和错误之后,我发现只要使用jqjoin()操作符就可以做到这一点。

首先生成所需输出的数组,然后使用逗号连接数组元素。

代码语言:javascript
复制
jq -r '[.case, .custom."speech invoked", .custom."input method"] | join(", ")'

好好享受吧。:)

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25558456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档