假设我具有以下JSON数组:
[
[
{ "value": "first_name" },
{ "value": "last_name" },
{ "value": "age" }
],
[
{ "value": "John" },
{ "value": "Johnson" },
{ "value": 27 }
],
[
{ "value": "Martin" },
{ "value": "Martinson" },
{ "value": 18 }
]
]
您可以将此JSON视为以下内容的不同视图:
| first_name | last_name | age |
|------------|-----------|-----|
| John | Johnson | 27 |
| Martin | Martinson | 18 |
数组始终的第一项表示“列” ,而其他项是行。
我想将上述JSON转换为更具可读性的内容,即完全摆脱第一项,合并所有分离的对象,并相应地对字段名称进行修改:
[
{
"first_name": "John",
"last_name": "Johnson",
"age": 27
},
{
"first_name": "Martin",
"last_name": "Martinson",
"age": 18
}
]
理想情况下,我想使用诸如 jq 之类的CLI工具来实现这一目标-可以吗?
答案 0 :(得分:1)
以下df.ID.append(df2.IA).unique().size
调用适用于您的示例输入:
jq
它提取标题,然后遍历列表的其余部分,创建一个对象,该对象具有从标题提取的键和从当前元素获取的值。
您可以try it here。
尽管它只处理具有特定列数的输入,但我认为可以将第一项的值与其他项的值通用地链接起来。
这正是我想要的。我用不与列数耦合的这个版本增强了您的示例:
.[0] as $header | .[1:] | map( { ($header[0].value) : .[0].value, ($header[1].value) : .[1].value, ($header[2].value) : .[2].value } )
答案 1 :(得分:1)
这是您构建所需结果的另一种方法。
(.[0] | map({key:.value})) as $keys | [.[1:][] | [$keys,.] | transpose | map(add) | from_entries]
您可以在这里利用from_entries
将标头和行视为键和值的集合。您只需要操作这些值即可将其与相应的键配对。