Обновить значение в JOSNObject без указателей в python - PullRequest
1 голос
/ 10 мая 2019

Я программирую код Python, в котором я использую JSONObjects для связи с приложением Java.Моя проблема заключается в том, что я хочу изменить значение в JSONObject (в этом примере он называется py_json), и размерность этого JSONObject не фиксирована, а известна.varName [x] является входом метода, а длина varName является измерением / размером JSONObjects.

Код будет работать так, но я не могу скопировать и вставить код 100 раз, чтобыуверен, что нет больших JSONObjects.

if length == 1:
   py_json[VarName[0]] = newValue
elif length == 2:
   py_json[VarName[0]][VarName[1]] = newValue
elif length == 3:
   py_json[VarName[0]][VarName[1]][VarName[2]] = newValue

В КИ это можно решить с помощью таких указателей:

int *pointer = NULL;
pointer = &py_json;
for (i=0; i<length; i++){
   pointer = &(*pointer[VarName[i]]);
}
*pointer = varValue;

Но в питоне нет указателей.Вы знаете способ иметь динамическое решение в Python?

1 Ответ

0 голосов
/ 10 мая 2019

«Переменные» Python - это просто имена, указывающие на объекты (вместо символических имен для адресов памяти, как в C), а присвоение Python не «копирует» значение переменной в новую ячейку памяти, оно только заставляет имя указывать надругой объект - поэтому вам не нужны указатели для получения того же результата (вы, вероятно, захотите прочитать это, чтобы узнать больше об именах / переменных Python ).

Итак, решение в основном то же самое: просто используйте цикл for, чтобы получить желаемую цель (фактически: родитель желаемой цели), а затем присвойте ей:

target = py_json
for i in range(0, length - 1):
    target = target[VarName[i]]

target[VarName[length - 1]] = newValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...