【问题标题】:Python WooCommerce API JSONDecodeError: Expecting valuePython WooCommerce API JSONDecodeError:期望值
【发布时间】:2018-10-07 06:06:08
【问题描述】:

设置

我正在使用Python wrapperWooCommerce REST API 连接到我的网上商店。

使用成功建立连接,

from woocommerce import API

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    wp_api=True,
    version="wc/v1"
)

为了获取产品信息,我使用,

products = wcapi.get("products")

为了读出产品,我使用

products.text

正确地给了我产品。见https://pastebin.com/E3r2R1GF


问题

.text 产生混乱的布局。我宁愿把它放在图书馆里。所以,我用,

products.json()

但这会产生以下错误,

  File "<ipython-input-31-c9e41d3bee87>", line 1, in <module>
    products.json()

  File "/Applications/anaconda/lib/python3.6/site-packages/requests/models.py", line 892, in json
    return complexjson.loads(self.text, **kwargs)

  File "/Applications/anaconda/lib/python3.6/site-packages/simplejson/__init__.py", line 518, in loads
    return _default_decoder.decode(s)

  File "/Applications/anaconda/lib/python3.6/site-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)

  File "/Applications/anaconda/lib/python3.6/site-packages/simplejson/decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())

JSONDecodeError: Expecting value

我做错了什么?

【问题讨论】:

  • 我们是否应该猜测“products.text”的外观?
  • 不,你没有。因为你太客气所以我加了。
  • 好的,我可以礼貌地回答了。

标签: python json wordpress rest woocommerce


【解决方案1】:

我做错了什么?

很明显,假设 .json() 可以获取任何损坏的标记并自动将其转换为符合 json 的内容,这是完全错误的 ;)

哦,是的 - 问题的来源是 - 与 php 的东西一样 - 可能应该是正确的 json 响应被 php 污染了:

<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/pedicure/public_html/pedicuremotorkopen.be/wp-content/plugins/woocommerce-parcelpro_1-2-8/admin/data/parcelpro-shipping-settings-services.php</b> on line <b>88</b><br />
[{"id":25348,"name":"Star Design Spa & Massage","slug":"star-design-spa-massage","permalink":"https:\/\/en.pedicuremotorkopen.be\/product\/star-design-spa-massage\/","date_created":"2018-01-23T11:46:28","date_modified":"2018-02-

等等……

编辑:

如何确保 json 不考虑 警告

正如我所提到的,源问题在于 PHP 本身。如果您对该站点具有管理员访问权限,则可以更改 php 设置以防止其显示虚假警告消息(如果该站点实际处于生产状态,我会建议您这样做)。

对于更一般的答案,我想说一个网站返回的除了格式良好的 json 之外的任何内容都应该是“application/json”内容类型被破坏了,这不是你的责任(正如写信的人客户端代码)来“修复”它 - 只需警告站点管理员该问题并等到他修复它(参见上文)。

现在您可以当然尝试“宽容”并自己修复响应内容,但是您必须手动执行此操作,而且由于您没有故障保护方法,因此充其量是脆弱的告诉什么是 json 的一部分,什么不是(这种 php 污染可能发生在响应内容的任何地方)。

【讨论】:

  • 我只是按照 REST API 的手册,他们建议我这样做; woocommerce.github.io/woocommerce-rest-api-docs/…。此外,以完全相同的方式连接到我的其他商店不会出现此错误,因此我提出了问题。我看你又客气了,但你用笑脸掩盖了它。感谢您指出错误。如何确保 json 不考虑 &lt;b&gt;Warning&lt;/b&gt;?编辑text 字符串,然后编辑json() 吗?
  • cf 我编辑的答案。 TL;DR:告诉站点管理员修复他的站点,作为客户端部分的开发者,处理损坏的 json 不是您的责任。
猜你喜欢
  • 2020-09-04
  • 2020-10-12
  • 2017-12-28
  • 2021-03-05
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
相关资源
最近更新 更多