设置
我使用Python wrapper和WooCommerce 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
我做错了什么?
答案 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污染可能发生在响应内容的任何地方)。