如何设置深层嵌套的JSON值?
对于下面的JSON,我想在“bonuses”里添加或更新一个项目。有办法直接把这个变量 {"name": "ham", "bonus": 12} 放进去吗?
{
"abilities": {
"FGI": {
"score": 10,
"mod": 1,
"bonuses": [
{
"name": "spam",
"bonus": 1
},
{
"name": "eggs",
"bonus": 1
}
]
}
}
}
注意:我需要说明一下,这个“JSON”其实是从一个JSON字符串构建的Python对象。
2 个回答
0
这会是个有趣的问题!其实没有简单(内置)的办法来解决它。在markusf的回答中,他提到可以在末尾添加一个项目,但这只是你问题的一半。如果你想确保里面没有“ham”这个项目,你就得用一个函数来遍历它,像这样:
function array_has_item_already(array, key, look_for_key_value) {
for( var i = 0; i < array.length; i++) {
if( typeof array[i][key] != 'undefined' && array[i][key] == look_for_key_value )
return array[i];
}
return false;
}
你可以这样调用这个函数,如果没有找到这个项目,它会返回false:
array_has_item_already(abilities.FGI.bonuses, "name", "ham");
更新这个函数,让它可以更新、添加或者其他操作就留给你自己去做吧。祝你玩得开心!
更新
我刚意识到你是在找Python的东西。好吧,你可以完全忽略我的回答,或者把它翻译一下,因为我说的是JavaScript。哈哈。
1
这段代码的意思是往一个叫做“bonuses”的列表里添加一个新的东西。这个新东西的名字是“ham”,而它的加成值是12。
另外,还有一种写法可以达到同样的效果,就是用方括号来访问“FGI”这个部分,像这样:
abilities["FGI"]["bonuses"].push(..);