0

从 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 输出。也许每个键都有一列,然后每个值都有一行。还有其他人在做这样的事情吗?

4

2 回答 2

7

在 Python 中,关键字是True,不是true。区分大小写很重要。举例说明dumpsand的用法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'}
于 2012-08-15T21:47:02.567 回答
4

编写纯 JSON 字符串和将 Python 数据结构转换为 JSON 字符串是有区别的。

PythonJSON{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 标准写出。

于 2012-08-16T19:55:40.317 回答