我有两个包含对象的文件。每个对象的字段都是对象的数组。我想按每个键合并对象数组。
我尝试按jq -s '.[0] * .[1] | to_entries[].key ' file1.json file2.json
获取所有键的列表。我不确定一旦捕获了对象数组,如何将键从。[1]更改为。[0]。
file1.json
{
"foo": [
{
"nested": "object"
}
],
"bar": [
{
"nested": "object.bar"
}
]
}
file2.json
{
"foo": [
{
"nested": "object.foo2"
}
],
"baz": [
{
"nested": "object.baz"
}
]
}
merged.json
{
"foo": [
{
"nested": "object"
},
{
"nested": "object.foo2"
},
]
"bar": [
{
"nested": "object.bar"
}
]
"baz": [
{
"nested": "object.baz"
}
]
}
答案 0 :(得分:2)
使用嵌套的reduce
:
reduce inputs as $in (.;
reduce ($in | keys_unsorted[]) as $k (.;
.[$k] += $in[$k]
)
)
答案 1 :(得分:2)
您可以使用以下内容:
df['Key']=df[['data','meta_data']].apply(tuple,1)
d={'word':' '.join,'start':'min','stop':'max','data':'first','meta_data':'first'}
df.groupby(df.Key.ne(df.Key.shift()).cumsum()).agg(d).reset_index(drop=True)
Out[171]:
word start stop data meta_data
0 but that's 2.72 3.09 2 9
1 alright 3.09 3.47 2 1
2 we'll have to 8.43 9.07 1 4
3 okay 9.19 10.01 2 2
4 sure 10.02 11.01 2 1
5 what? 11.02 12.00 1 4
map(to_entries) | add | group_by(.key) | map({ key: (.[0].key), value:([.[].value | add]) }) | from_entries
将每个文件更改为键/值对数组。
map(to_entries)
将这两个数组合并为一个。
add
将数组的内容更改为多个数组,这些数组使用相同的键将对象重新组合。
group_by(.key)
将这些数组转换为具有键/值对的对象,该键/值对的键是原始键,值是使用该键的不同对象的合并值。
map({ key: (.[0].key), value:([.[].value | add]) })
从键/值对象数组重新创建对象。