将键和值追加到多个 JSON 文件中的一个 JSON 对象
Append keys and values to one JSON object from multiple JSON files
我目前正在处理三个json文件。
主.json
{
"master":[
{
"sport": "soccer",
"id": 1
},
{
"sport": "football",
"id": 2
}
]
}
data1.json
{
"soccer": {
"players": 11
},
"football": {
"players": 12
}
}
data2.json
{
"soccer": {
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
},
"football": {
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
}
}
我想做的是将每个 json 文件中每项运动的属性合并到master.json
中。
这就是我正在寻找的:
{
"master":[
{
"sport": "soccer",
"id": 1,
"players": 11,
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
},
{
"sport": "football",
"id": 2,
"players": 12,
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
}
]
}
理想情况下,我希望能够包含一个条件,其中data1
和data2
中的运动值必须与master.json
中的值相匹配才能进行追加。因此,如果"棒球"在data1
和data2
但不master
,则不包括在内。
我尝试在JavaScript中使用underscore
,在Python中使用json
,但没有运气。我似乎找不到一种方法来遍历所有三个 json 文件以让它们相互交谈,尤其是查看运动是否匹配。
任何帮助将不胜感激。我也会尽力澄清和混淆。
为了演示 Python 的相对技巧,我将提出一个解决方案:
import json
from collections import OrderedDict
with open('master.json') as m, open('data1.json') as d1, open('data2.json') as d2:
master = json.load(m, object_pairs_hook=OrderedDict)
data1 = json.load(d1, object_pairs_hook=OrderedDict)
data2 = json.load(d2, object_pairs_hook=OrderedDict)
for i, obj in enumerate(master['master']):
d1, d2 = data1.get(obj['sport']), data2.get(obj['sport'])
if d1:
master['master'][i].update(d1)
if d2:
master['master'][i].update(d2)
print(json.dumps(master,indent=2))
输出:
{
"master": [
{
"sport": "soccer",
"id": 1,
"players": 11,
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
},
{
"sport": "football",
"id": 2,
"players": 12,
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
}
]
}
这将做到这一点。请记住,这是为了您的情况。
var master = {
"master":[
{
"sport": "soccer",
"id": 1
},
{
"sport": "football",
"id": 2
}
]
}
var data1 = {
"soccer": {
"players": 11
},
"football": {
"players": 12
}
}
var data2 = {
"soccer": {
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
},
"football": {
"stadiums": {
"away": "StadiumA",
"home": "StadiumB"
}
}
}
var masterSports = master.master.map(function(object){
return object.sport;
});
var data1Keep = {};
var data2Keep = {};
Object.keys(data1).map(function(key){
if(masterSports.indexOf(key) > -1 && !data1Keep.hasOwnProperty(key)){
data1Keep[key] = data1[key];
}
});
Object.keys(data2).map(function(key){
if(masterSports.indexOf(key) > -1 && !data2Keep.hasOwnProperty(key)){
data2Keep[key] = data2[key];
}
});
master.master.map(function(object){
for(key in data1Keep){
if(key == object.sport){
for(i in data1Keep[key]){
object[i] = data1Keep[key][i];
}
}
}
for(key2 in data2Keep){
if(key2 == object.sport){
for(j in data2Keep[key2]){
object[j] = data2Keep[key2][j];
}
}
}
return object;
});
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 如何为json对象中的段发送array[]
- 将JSON对象传递给angular指令
- 更改JSON对象的结构
- 访问JSON对象内部的数组元素
- 在ejs-partial中对JSON对象进行迭代
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 访问嵌套JSON对象的键,其中键是动态的
- json对象中缺少对象循环
- 发送json对象或使用express路由呈现视图
- 在play2框架中向json对象添加下拉列表项
- 元素名称上带有短划线 (-) 字符的 Json 对象
- autocomplete不接受源的json对象
- 如何在javascript中创建动态json对象
- 在使用客户端脚本时拾取JSON对象
- 如何通过json对象数组为嵌套对象赋值
- 构造JSON对象