【问题标题】:Python: Changing an Element in JSONPython:更改 JSON 中的元素
【发布时间】:2021-04-28 18:44:19
【问题描述】:

我正在尝试遍历 JSON“卡片”列表并更新 ID 为 1 的卡片的描述。看起来很简单,我不确定我哪里出错了。代码:

data = json.load(f)
newData = "This is the correct data"
for aCard in data['theList']:
    if aCard["id"] == 1:
        print("Found id1") #works
        description = aCard["sections"][0]["payload"][0]["description"]
        print(description) #works
        aCard["sections"][0]["payload"][0]["description"] = newData
        print(description) #prints the same wrong data

我哪里错了?就好像这条线 aCard["sections"][0]["payload"][0]["description"] = newData 被完全忽略了,或者我做错了什么。

谢谢!

【问题讨论】:

  • aCard["sections"][0]["payload"][0]["description"] 指向内存中的newData,因此您必须重新分配description,因为它引用的是旧内存

标签: python json for-loop element


【解决方案1】:

不,它不会被忽略,但您不会打印单元格的新内容。考虑以下代码:

a = "quick brown fox"
b = a
a = "lazy dog's back"
print(b)

您希望看到什么?我期待看到的是“速成棕狐”。当我更改a 的值时,这对b 绑定的字符串没有任何作用。

这正是您在上面看到的。 description 不指向该单元格。它指的是在单元格中开始的字符串。当您更改单元格的值时,它现在绑定到一个新字符串,但description 仍然绑定到旧字符串。

只需print(aCard["sections"][0]["payload"][0]["description"]),您就会发现它很好。

【讨论】:

  • 嗨蒂姆,感谢您的回复。我刚刚在这里添加的打印语句非常快,但实际的 JSON 没有更新
  • 嗯,aCard 肯定会更新。假设 f 是新打开的并具有写入权限,则 JSON 在您使用 json.dump(data, f) 写回之前不会更新。你没有向我们展示任何代码。
  • 这是有道理的。我将如何使用写权限打开文件?
  • 嗯,在某处你有f = open("jsonfile.json","r")。只需用“w”再做一次。
猜你喜欢
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2019-02-15
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多