【问题标题】:Update correctly the fields of the json file for REST API正确更新 REST API 的 json 文件的字段
【发布时间】:2017-09-08 09:13:22
【问题描述】:

我在 python 中使用 GET 检索带有 REST API 的 json 文件,并希望检索 json 文件更新它的一些值,然后更新该值。我的得到如下:

 r1 = requests.get(url)

它返回整个 json 文件。现在我想更新 json 的一些值并使用 PUT REST API 调用将其放回原处。我的 put 命令如下:

requests.put(url, json=r1)

我要更新的字段如下:

r1.json()['a']['a'] = 2 // print r1.json()['a']['a'] ->1
r1.json()['a']['b'] = 2 // print r1.json()['a']['b'] ->1
r1.json()['a']['c'] = 2 // print r1.json()['a']['c'] ->1

我的问题是如何正确更新我的 json 字段?

【问题讨论】:

  • 你从响应中调用 json() 并且你不能改变它。首先,您需要将 r1.json 保存到某个变量,然后更改一些值并在 requests.put 中使用它。

标签: python json rest


【解决方案1】:

你应该把它保存为一个变量,修改它然后发回

my_json = r1.json()
my_json['a']['a'] = 2
my_json['a']['b'] = 2
my_json['a']['c'] = 2
requests.put(url, json=my_json)

您在代码中所做的本质上是调用.json(),它从响应中生成一个字典,您并没有真正修改响应对象 - 而是真正修改了.json() 调用返回值的结果。

【讨论】:

  • 这成功了。但是,我有另一个问题。如果我只想更新 json 的值而不是创建新的值,我应该做一个 put 还是一个 post? json 文件已正确更改,但 put 不会更改我服务器中的字段。
  • 通常,更新一些资源使用PUT,创建使用POST。但实际上,您可以使用 POST 进行任何操作,这取决于您的应用架构和偏好。 Description of meaning HTTP method in terms of REST -> URL 和 HTTP 方法的关系
  • "从响应中生成一个 json" => 实际上它生成一个 dict - "json" 不是数据类型,它是一种文本格式。
  • @brunodesthuilliers,你说得对,我已经解决了
【解决方案2】:

为了改进 bluesummer 的答案,response.json() 只是json.loads(response.content) 的快捷方式,每次调用时都会创建一个 new dict。 IOW 这个代码是什么:

r1.json()['a']['a'] = 2

  • r1.content 创建一个字典
  • 更新这个字典
  • 最后将其丢弃。

这就是为什么如果你想更新它,你必须保留对 dict 的引用(将它分配给一个变量)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2018-11-30
    • 2018-06-03
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多