【发布时间】:2020-02-05 16:53:07
【问题描述】:
我有以下 json 文件
[
{
"clusterName": "cluster1",
"nodes": [
{
"hostname": "server1",
"dse": "6.7.5"
},
{
"hostname": "server2",
"dse": "6.7.5"
}
]
},
{
"clusterName": "cluster2",
"nodes": [
{
"hostname": "server3",
"dse": "6.7.5"
},
{
"hostname": "server4",
"dse": "6.7.5"
}
]
}
]
我还有另一个 json
[
{
"hostname": "server1",
"memorysize": "47.01 GiB",
"processorcount": 12
},
{
"hostname": "server2",
"memorysize": "47.01 GiB",
"processorcount": 12
},
{
"hostname": "server3",
"memorysize": "47.01 GiB",
"processorcount": 10
},
{
"hostname": "server4",
"memorysize": "47.01 GiB",
"processorcount": 11
},
{
"hostname": "server5",
"memorysize": "47.01 GiB",
"processorcount": 12
},
{
"hostname": "server6",
"memorysize": "47.01 GiB",
"processorcount": 12
}
]
我想加入这两个 json 以产生以下输出
[
{
"clusterName": "cluster1",
"nodes": [
{
"hostname": "server1",
"dse": "6.7.5",
"memorysize": "47.01 GiB",
"processorcount": 12
},
{
"hostname": "server2",
"dse": "6.7.5",
"memorysize": "47.01 GiB",
"processorcount": 12
}
]
},
{
"clusterName": "cluster2",
"nodes": [
{
"hostname": "server3",
"dse": "6.7.5",
"memorysize": "47.01 GiB",
"processorcount": 10
},
{
"hostname": "server4",
"dse": "6.7.5",
"memorysize": "47.01 GiB",
"processorcount": 11
}
]
}
]
基本上第一个文件有集群字典列表。有节点,我有第二个文件,其中包含节点字典列表。
提到的解决方案不适用于多个集群。
有没有更好的方式在 python 中执行此操作?
【问题讨论】:
-
我们可以假设第一个文件的每个节点在第二个文件中都会有一个关联的对象吗?
-
@Aaron 第一个文件的每个节点都会在第二个文件中有一个关联的对象。
-
我的 jq foo 很弱,所以我不确定如何最好地合并它,但是您可以使用
cat file1.txt file2.txt | jq -s ".[0][].nodes[] * .[1][0]"获得所需的节点数组 -
我相信您在问题的第三个代码 sn-p 中有错字 - 您想要的输出。外部数组有两个元素,其中第二个元素的键为
"clusterName",值为"cluster2"。第二个元素的"nodes"数组又具有两个元素,其中第一个元素的"hostname"设置为"server3"。但是第二个元素应该将其"hostname"设置为"server4"。对? - 我建议您考虑更正这一点,以免混淆任何来到这里的读者。 (由于“6 个字符规则”,我无法自己编辑。) -
感谢您发现错字。我已经更新了。