Python中不能正确解析JSON所有的时间。(Python not parsing JSON co

2019-09-21 06:00发布

获取从JSON对象这回:

该呼叫在这里提出:

response = make_request(GET_QUALIFIED_OFFERS_URL, request)

def make_request(url, json_data):
    host = url
    req = urllib2.Request(host, json_data, {'content-type': 'application/json'})
    response_stream = urllib2.urlopen(req)

    return response_stream.read()

response = {"Violations":[],"Messages":[],"Log":[],"Session":{"SessionId":813982132},"W3iDeviceId":294294043,"IsAfppOfferwallEnabled":true}, skipkeys=True, ensure_ascii=False, sort_keys=True, indent=4}

print json.dumps((response), sort_keys=True, indent=4)

收到一个错误:

print json.dumps({"Violations":[],"Messages":[],"Log":[],"Session":{"SessionId":813982132},"W3iDeviceId":294294043,"IsAfppOfferwallEnabled":true}, skipkeys=True, ensure_ascii=False, sort_keys=True, indent=4)
NameError: global name 'true' is not defined

它看起来像一些JSON是不正确的。 我把周围的值引号“真”和它的作品。 那么,有没有办法把身边所有的值报价?

这工作:

response = {"Violations":[],"Messages":[],"Log":[],"Session":{"SessionId":813982132},"W3iDeviceId":294294043,"IsAfppOfferwallEnabled":"true"}, skipkeys=True, ensure_ascii=False, sort_keys=True, indent=4}

问题是我有JSON像这样与各地一样,虚实与硕大的按键没有引号值的地方 - 值数据集。

我所试图做的是采取JSON和让它非常能够比较反对。 我想写一个自动化框架的工作要考什么回来的JSON。 理想我很想创造像一个CSV输出中。 也许对每个关键一列,然后对每个值的行。 任何人做这样的事情?

Answer 1:

在Python关键字是True ,而不是true 。 区分大小写计数。 通过两个例子使用的方式dumpsloads

>>> from json import dumps, loads
>>>
>>> d1 = {'key1': 'val1', 'key2': True, 'key3': False}
>>> s1 = dumps(d1)
>>> d2 = loads(s1)
>>> d1
{'key3': False, 'key2': True, 'key1': 'val1'}
>>> s1
'{"key3": false, "key2": true, "key1": "val1"}'
>>> d2
{u'key3': False, u'key2': True, u'key1': u'val1'}


Answer 2:

有写纯JSON字符串和转换Python数据结构成JSON字符串之间的区别。

Python的JSON{En,De}coder以下默认翻译执行:

JSON            Python

object          dict
array           list
string          unicode
number (int)    int, long
number (real)   float
true            True
false           False
null            None

所以,当你写{'foo': True}在Python,JSONEncoder写出{'foo': true}按JSON标准。



文章来源: Python not parsing JSON correctly all the time.