如何设置深层嵌套的JSON值?

1 投票
2 回答
2549 浏览
提问于 2025-04-16 13:26

对于下面的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(..);

撰写回答