将.json数据转换为电子表格的MATRIX



我有一个大约200个代码的列表,如下所示:

EB0016
EB0017
EB0018
EB0019
EB0021
EB0023
EB0024
EB0026
EB0027

通过我工作中的一个系统,200列表中的各种"父"代码与相应的"子"代码的子集一起被放置在业务报告中,这些代码也来自同一200列表,如下面的代码块所示。

为了解释下面的值,对于放置代码父代码EB0016的每个报告,我们还看到子代码EB0148 15.8%的时间,以及子代码EB0192 13.7%的时间等。每当我们看到代码EB0017放置时,我们也看到EB0187 13.6%的时间等等。在下面的示例中,EB0016和EB0017是父值,我们可以看到子值以及十进制格式的百分比。

在json文件中,每个父代码只列出一次,因此有200个父代码。对于200个父代中的每一个,都列出了子代代码,每个子代都有相应的十进制频率,显示我们看到特定子代代码与父代代码一起放置的频率。

父代码和子代码都来自同一个200的列表,因此我现在有了可以创建完整矩阵的数据。

我的问题是,如何将这个json文件转换为csv文件,然后导入电子表格?通常情况下,我会尝试尝试一下一些代码,然后发帖寻求更多帮助,但经过大量搜索,我完全不知道该如何做到这一点。也许是awk?

{
"EB0016": {
"EB0148": 0.1581,
"EB0192": 0.1372,
"EB0135": 0.1177,
"EB0147": 0.0867,
"EB0110": 0.0822,
"EB0107": 0.0697
},
"EB0017": {
"EB0187": 0.1364,
"EB0148": 0.1312,
"EB0192": 0.093,
"EB0147": 0.0847
}
}

我想使用上面的json文件(我列出了2个父代码,但实际上大约有200个代码(并生成一个矩阵,如下所示:

EB0107  EB0110  EB0135  EB0147  EB0148  EB0187  EB0192
EB0016  0.0697  0.0822  0.1177  0.0867  0.1581  -       0.1372
EB0017  -       -       -       0.0847  0.1312  0.1364  0.093

好吧,我认为我已经找到了你想要的,jq(在shell中处理JSON的事实上的标准工具(应该可以做到:

jq -r 'keys as $codes | 
((["Code"] + $codes),
(to_entries | sort_by(.key)[] as $row |
reduce $codes[] as $c ([$row.key]; . + [$row.value[$c]? // "-"]))) |
@tsv' input_file.json

对于您的样品输入,它会产生

Code    EB0016  EB0017
EB0016  -   -
EB0017  -   -

因为你的父代码不会作为彼此的子代码出现,但如果它们出现了,你会看到相应的数字,而不是破折号。

@tsv更改为@csv以获得CSV输出,如您的问题所示(但不是所需输出的样本(。(请,请,请对这些事情保持一致,并提供相互匹配的样本输入和输出。这会让回答问题变得更容易(。

我不明白这个样本是如何产生输出的,但这里有一个使用GNU awk和json扩展的机会:

$ gawk '
@load "json"
BEGIN{
OFS="t"
PROCINFO["sorted_in"]="@ind_str_asc"
}
{
json=json $0
if(json_fromJSON(json,array)!=0) {
for(i in array)
for(j in array[i])
header[j]
for(i in header)
printf "%s%s%s",(++c==1?OFS:""),i,(c==length(header)?ORS:OFS)
for(i in array) {
c=0
printf "%s%s",i,OFS
for(j in header)
printf "%s%s",((v=array[i][j])?v:"-"),(++c==length(header)?ORS:OFS)
}
json=""
}
}' file.json

输出:

EB0107  EB0110  EB0135  EB0147  EB0148  EB0187  EB0192
EB0016  0.0697  0.0822  0.1177  0.0867  0.1581  -       0.1372
EB0017  -       -       -       0.0847  0.1312  0.1364  0.093

Json分机在这里可用。

最新更新