从文件读取JSON?

我只是因为一个简单的看起来简单的陈述就把一些错误扔在我的脸上而感到头痛。

我有一个名为strings.json这样的json文件:

"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ..., {"-name": "address", "#text": "Address"}] 

我现在想读取json文件。 我有我发现的这些陈述,但它不工作:

 import json from pprint import pprint with open('strings.json') as json_data: d = json.loads(json_data) json_data.close() pprint(d) 

控制台上显示的错误是这样的:

 Traceback (most recent call last): File "/home/.../android/values/manipulate_json.py", line 5, in <module> d = json.loads(json_data) File "/usr/lib/python2.7/json/__init__.py", line 326, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 366, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) TypeError: expected string or buffer [Finished in 0.1s with exit code 1] 

编辑

json.loads更改为json.load

得到这个:

 Traceback (most recent call last): File "/home/.../android/values/manipulate_json.py", line 5, in <module> d = json.load(json_data) File "/usr/lib/python2.7/json/__init__.py", line 278, in load **kw) File "/usr/lib/python2.7/json/__init__.py", line 326, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 369, in decode raise ValueError(errmsg("Extra data", s, end, len(s))) ValueError: Extra data: line 829 column 1 - line 829 column 2 (char 18476 - 18477) [Finished in 0.1s with exit code 1] 

json.load()方法 (在“load”中没有“s”)可以直接读取文件:

 import json with open('strings.json') as json_data: d = json.load(json_data) print(d) 

您正在使用仅用于string参数的json.loads()方法 。

编辑:新消息是一个完全不同的问题。 在这种情况下,该文件中存在一些无效的json。 为此,我build议通过jsonvalidation器运行该文件。

也有固定JSON的解决scheme,例如, 如何自动修复无效的JSONstring? 。

这里是一个代码的副本,适合我的工作

 import json with open("test.json") as json_file: json_data = json.load(json_file) print(json_data) 

与数据

 { "a": [1,3,"asdf",true], "b": { "Hello": "world" } } 

你可能想用一个try catch包装你的json.load行,因为无效的JSON会导致一个stacktrace错误信息。

问题是使用声明:

 with open('strings.json') as json_data: d = json.load(json_data) pprint(d) 

该文件将被隐式closures。 没有必要再次调用json_data.close()

在python 3中,我们可以使用下面的方法。

从文件读取并转换为JSON

 # Considering "json_list.json" is a json file with open('json_list.json') as fd: json_data = json.load(fd) 

要么

 json_data = json.load(open('json_list.json')) 

string到JSON

 json_data = json.loads('{"name" : "myName", "age":24}')