Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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 - Fatal编程技术网

要在python中加载的.json文件的格式

要在python中加载的.json文件的格式,python,json,Python,Json,这是我的JSON文件 [{"": "", "User ID": "913fd663bc66a452", "Description": "", "Timestamp": "Jul 09, 2014 10:33 PM", "Session Index": "2", "Platform": "Android", "Version": "0.2.9", "Params": "{ email : soleimaniarmin@yahoo.com; comments : 09337845621; sta

这是我的JSON文件

[{"": "", "User ID": "913fd663bc66a452", "Description": "", "Timestamp": "Jul 09, 2014 10:33 PM", "Session Index": "2", "Platform": "Android", "Version": "0.2.9", "Params": "{ email : soleimaniarmin@yahoo.com;  comments : 09337845621;  stars : 4.0;  name : ari}", "Device": "Samsung Galaxy S4", "Event": "feedback"},{"": "", "User ID": "6e35346f9754b787", "Description": "", "Timestamp": "Jul 09, 2014 04:36 PM", "Session Index": "6", "Platform": "Android", "Version": "0.3.0", "Params": "{ email : eddgrow89@hotmail.com;  comments : i love My live ;  stars : 5.0;  name : eddy}", "Device": "Alcatel  One Touch 6033A", "Event": "feedback"},]
我正在尝试用python解析此文件,代码如下:

import json
from pprint import pprint 

with open('android/2014-07-09.json', 'rb') as json_file:
    contents = json_file.read();
    print contents;

data = json.loads(contents);
pprint(data);
但当我执行它时,会出现以下错误

ValueError: No JSON object could be decoded
如果我将
json.load
替换为
json.load
,则会出现以下错误

  File "messenger.py", line 9, in <module>
    data = json.load(contents);
  File "/usr/lib/python2.7/json/__init__.py", line 286, in load
    return loads(fp.read(),
  AttributeError: 'str' object has no attribute 'read'
文件“messenger.py”,第9行,在
data=json.load(内容);
文件“/usr/lib/python2.7/json/_init__.py”,第286行,已加载
返回加载(fp.read(),
AttributeError:“str”对象没有属性“read”

如何解开这个谜团。

首先,您应该将文件发送到
json.load
中,而不是将字符串发送到
json.loads
。将其存储到变量中然后发送到解析器中是不必要的开销

with open('android/2014-07-09.json', 'rb') as json_file:
    contents = json.load(json_file)
那么,您的文件不是有效的json文档。您可以使用任何工具对其进行测试,例如:

在您的例子中,问题是字符串末尾的逗号,就在结束符
]
之前。不仅如此,还有其他一些“垃圾”例如,
Params
键包含一个字符串作为值,该值恰好是json文档本身,而不是一些有用的数据。虽然这是有效的json格式,但我想不出任何情况下会出现这种情况

总而言之:更改json文档的源:)


EDIT:正如Martijn Pieters指出的那样,
Params
实际上不是一个有效的json字符串,尽管它看起来是这样的。但话说回来。。。获取正确的json文档

首先,您应该将文件发送到
json.load
中,而不是将字符串发送到
json.load
。将其存储到变量中,然后将其发送给解析器,这是不必要的开销

with open('android/2014-07-09.json', 'rb') as json_file:
    contents = json.load(json_file)
那么,您的文件不是有效的json文档。您可以使用任何工具进行测试,例如:

在您的例子中,问题是字符串末尾的逗号,就在结束符
]
之前。不仅如此,json文件中还有其他一些“垃圾”。例如,
Params
键包含一个字符串作为值,该值恰好是json文档本身,而不是一些有用的数据。虽然这是一种有效的json格式,但我想不出任何情况下会出现这种情况

总而言之:更改json文档的源:)


EDIT:正如Martijn Pieters指出的那样,
Params
实际上不是一个有效的json字符串,尽管它看起来是这样的。但话说回来。。。获取正确的json文档

将字符串插入显示它不是有效的JSON:

Parse error on line 25:
...edback"    },    ]
--------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
这是因为最后一个对象后面有一个逗号。JSON字符串中不允许使用尾随逗号

如果无法修复文件,可以使用以下命令删除此逗号:

import re

contents = re.sub(r',\s*(?=])', '', contents)
演示:

或从文件加载:

with open('android/2014-07-09.json', 'rb') as json_file:
    data = demjson.decode_file(json_file, strict=False)

将字符串插入显示它不是有效的JSON:

Parse error on line 25:
...edback"    },    ]
--------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
这是因为最后一个对象后面有一个逗号。JSON字符串中不允许使用尾随逗号

如果无法修复文件,可以使用以下命令删除此逗号:

import re

contents = re.sub(r',\s*(?=])', '', contents)
演示:

或从文件加载:

with open('android/2014-07-09.json', 'rb') as json_file:
    data = demjson.decode_file(json_file, strict=False)

欢迎使用python,分号在这里是可选的;根据标准,最后一个逗号无效。删除它。这个json字符串中的问题比后面的逗号还多。。。键
Params
的值错误。检查我的答案。完全正确。@ikaros45!!“Params”应该是一个json对象。问题是数据来自flurry。。我不能改变这一点。。而且我还需要单独分析。。这是另一个超载…然后我的小朋友,我建议你改变你的经销商=)。。。或者至少让他们知道他们在运送垃圾。如果你破解了字符串,从长远来看,他们会以某种方式改变它,而你的修复可能无法工作。欢迎使用python,这里分号是可选的。这不是有效的JSON;根据标准,最后一个逗号无效。删除它。这个json字符串中的问题比后面的逗号还多。。。键
Params
的值错误。检查我的答案。完全正确。@ikaros45!!“Params”应该是一个json对象。问题是数据来自flurry。。我不能改变这一点。。而且我还需要单独分析。。这是另一个超载…然后我的小朋友,我建议你改变你的经销商=)。。。或者至少让他们知道他们在运送垃圾。如果你破解了这个字符串,从长远来看,他们会以某种方式改变它,而你的修复可能不起作用。我认为破解json字符串是错误的。源代码无效,必须修复。@ikaros45:我同意,但这可能来自外部源?我认为破解json字符串是错误的。源代码无效,必须修复。@ikaros45:我同意,但这可能是来自外部源?但是
Params
值与JSON的距离太远,无法调用它。任何键或值周围都没有引号。是的,你是对的。这是一个想要的json字符串。不管怎么说,输入都是垃圾。
Params
值与JSON的距离太远,无法调用它。任何键或值周围都没有引号。是的,你是对的。这是一个想要的json字符串。无论如何,那个输入都是垃圾。