从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不正确。我把引号括在值“true”附近并且它有效。那么有没有办法在所有值附近加上引号?
本作品:
response = {"Violations":[],"Messages":[],"Log":[],"Session":{"SessionId":813982132},"W3iDeviceId":294294043,"IsAfppOfferwallEnabled":"true"}, skipkeys=True, ensure_ascii=False, sort_keys=True, indent=4}
问题是我有像这样的JSON,其值为false和true,在巨大的键值数据集中没有引号。
我要做的是拿JSon并使其能够与之进行比较。我正在尝试编写一个自动化框架工作来测试Json中的内容。理想情况下,我希望创建像csv输出。也许每个键都有一列,然后每个值都有一行。其他人做这样的事情吗?
答案 0 :(得分:7)
在Python中,关键字为True
,而不是true
。区分大小写。作为dumps
和loads
:
>>> 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'}
答案 1 :(得分:4)
编写纯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
因此,当您在Python中编写{'foo': True}
时,JSONEncoder会根据JSON标准写出{'foo': true}
。