Python WooCommerce API JSONDecodeError:期望值

时间:2018-04-26 13:48:08

标签: python json wordpress rest woocommerce

设置

我使用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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

我做错了什么?

很明显,假设.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以外应该是什么&#34; application / json&#34;内容类型被破坏,并且它不是你的责任(作为编写客户代码的人)来修复&#34;它 - 只是警告网站的管理员有关问题,并等到他修复它(参见上文)。

现在你可能当然会试图成为&#34;宽容&#34;并且自己修复响应内容但是你必须手动完成它并且它最好是脆弱的,因为你没有故障保护的方式来告诉json的部分内容和不是什么(这种php污染可能发生在响应内容的任何地方)。