Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python没有一直正确解析JSON。_Python_Json_Api_Automation - Fatal编程技术网

Python没有一直正确解析JSON。

Python没有一直正确解析JSON。,python,json,api,automation,Python,Json,Api,Automation,从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.urlop

从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输出。可能每个键都有一列,然后每个值都有一行。还有人这样做吗?

在Python中,关键字是
True
,而不是
True
。区分大小写计数。作为
转储
加载
的示例用法:

>>> 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'}

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

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

JSON            Python

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

因此,当您在Python中编写
{'foo':True}
时,JSONECODER会按照JSON标准写出
{'foo':True}

尝试使用True而不是True。谢谢。这就解释了。这就是问题所在。我控制不了。这就是我从JSON对象得到的结果。有没有办法解析数据并修复它?再次感谢您的帮助。@user1601701-我想您误解了什么。粘贴的内容不能是从JSON对象返回的内容。如果您有JSON,它应该是一个字符串,
true
将以小写形式显示。如果您正在使用python词典,则
True
将使用大写字母。转储/加载方法说明了这一点。您发布的代码完全错误。看起来好像有人试图将JavaScript代码直接粘贴到.py文件中。@user1601701-请查看我所做的编辑。它可能会为您澄清一些事情。我更改了我的代码来执行此操作:def make_request(url,json_data):host=url req=urlib2.request(host,json_data,{'content-type':'application/json'})response_stream=urlib2.urlopen(req)#这是一次尝试将json格式化为漂亮的尝试--遇到了json数据的问题(response_stream.read())s=json.dumps(data_obj,sort_keys=True,indent=4)print s return response_stream.read()这个答案非常重要。如果您正在导入数据,而传入的字符串是
'{“data”:False}“
python的json库将在加载时失败。如果发现此错误,请首先清除json并向json提供程序注册错误。