Это тоже смутило меня, потому что я исходил из фона C.
В C переменная - это место в памяти с определенным типом. Назначение переменной копирует данные в ячейку памяти переменной.
Но в Python переменные действуют скорее как указатели на объекты. Поэтому присвоение одной переменной другой не создает копию, она просто превращает это имя переменной в один и тот же объект.
Предполагая, что файл содержит динамические и неизвестные ключи и значения, и вы не можете смоделировать их в своем приложении. Затем вы можете сделать что-то вроде:
func main() {
if os.Args[1] == "update-json-from-json" {
...
jsonFile := readInput()
var jsonKeys interface{}
err := json.Unmarshal(jsonFile, &jsonKeys)
functions.Check(err)
...
}
}
, чтобы загрузить содержимое в empty interface
, а затем использовать библиотеку го отражения ( https://golang.org/pkg/reflect/ [ 113]) для перебора полей, поиска их имен и значений и обновления их в соответствии с вашими потребностями.
Альтернативой является Unmarshal в map[string]string
, но это не очень хорошо справится с вложенным JSON, хотя это может (но я не проверял это).