Как установить глубоко вложенное значение JSON? - PullRequest
1 голос
/ 10 марта 2011

Для JSON ниже я хочу добавить / обновить элемент до «бонусов».Есть ли способ, которым я могу напрямую указать переменную {"name": "ham", "bonus": 12}?

{
    "abilities": {
        "FGI": {
            "score": 10,
            "mod": 1,
            "bonuses": [
                {
                    "name": "spam",
                    "bonus": 1 
                },
                {
                    "name": "eggs",
                    "bonus": 1 
                } 
            ] 
        } 
    }
} 

ПРИМЕЧАНИЕ. Я должен уточнить, что "JSON" - это объект Python, построенный из строки JSON.

Ответы [ 2 ]

1 голос
/ 10 марта 2011

abilities.FGI.bonuses.push ({"name": "ham", "bonus": 12});

РЕДАКТИРОВАТЬ или:

способность [ "ФГИ"] [ "бонусы"] самокаты (..).

0 голосов
/ 10 марта 2011

Это будет весело! На самом деле не существует простого (встроенного) способа сделать это. В ответе Маркуса он упоминает, что он нажимает на предмет в конце, но это только половина вашей проблемы. Если вы хотите убедиться, что там нет элемента «ветчины», вам придется пройти через него с помощью функции, подобной этой:

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");

Я оставлю это вам, чтобы выдвинуть функцию, чтобы она обновлялась или передавалась или что-то в этом роде. Веселись!

UPDATE

Я только что понял, что вы ищете что-то в python. Уэлп, вы можете полностью игнорировать мой ответ или перевести его, как в js. HA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...