【发布时间】:2021-12-03 06:07:12
【问题描述】:
我有一个独特的 JSON 对象列表(分配为 json_object),所有对象都具有类似这样的结构
{
"WREF": {
"PSME": {
"sbt": {
"upr": 68.34,
"lwr": 3.02
}
}
},
"WREF": {
"TSHE": {
"mbt": {
"upr": 39.425,
"lwr": -6.855
}
}
},
"WREF": {
"PSME": {
"mbt": {
"upr": 119.82,
"lwr": 16.02
}
}
},
"ABBY": {
"PSME": {
"sbt": {
"upr": 84.42,
"lwr": 9.02
}
}
},
"ABBY": {
"TSHE": {
"sbt": {
"upr": 39.05,
"lwr": 2.01
}
}
},
"ABBY": {
"TSHE": {
"mbt": {
"upr": 69.35,
"lwr": 4.07
}
}
}
}
我正在尝试将它们重新组织/重组成更有条理的东西:
{
"WREF": {
"PSME": {
"sbt": {
"upr": 68.34,
"lwr": 3.02
},
"mbt": {
"upr": 119.82,
"lwr": 16.02
}
},
"TSHE": {
"mbt": {
"upr": 39.425,
"lwr": -6.855
}
}
},
"ABBY": {
"PSME": {
"sbt": {
"upr": 84.42,
"lwr": 9.02
}
},
"TSHE": {
"sbt": {
"upr": 39.05,
"lwr": 2.01
},
"mbt": {
"upr": 69.35,
"lwr": 4.07
}
}
},
}
我目前正在使用这段代码来执行此操作,但它似乎只是将 JSON 的最高级别(如 WREF 和 ABBY)放在一起,而不是合并 PSME 和 TSHE 或 JSON 结构中较低级别的任何内容。
#loop through each object
lapply( X = seq( 2, length( json_object), 1), FUN = function( x){
#if its the second object
if( x == 2){
#check if the first objects name matches and join
if( names( json_object[[ 1]]) %in% names( json_object[[ x]])){
final_object <<- Map( c, json_object[[1]], json_object[[ x]])
} else{
final_object <<- c( json_object[[ 1]], json_object[[ x]])
}
} else{ #if not the second object
#check if there are any matching names
if( names( json_object[[ x]]) %in% names( final_object)){
#join matching names
final_object[ names( json_object[[ x]])] <<- Map( c, final_object[ names( json_object[[ x]])],
json_object[[ x]]
)
} else{ #if not, just join
final_object <<- c( final_object, json_object[[ x]])
}
}
})
这种情况下的最终对象是这样的:
{
"WREF": {
"PSME": {
"sbt": {
"upr": 68.34,
"lwr": 3.02
},
},
"PSME": {
"mbt": {
"upr": 119.82,
"lwr": 16.02
}
},
"TSHE": {
"mbt": {
"upr": 39.425,
"lwr": -6.855
}
}
},
"ABBY": {
"PSME": {
"sbt": {
"upr": 84.42,
"lwr": 9.02
}
},
"TSHE": {
"sbt": {
"upr": 39.05,
"lwr": 2.01
}
},
"TSHE": {
"mbt": {
"upr": 69.35,
"lwr": 4.07
}
}
}
}
有没有简单的方法来做到这一点?最终我想用更复杂的 JSON 结构来做这件事。
【问题讨论】: