我在文件中有此JSON:
{
"maps": [
{
"id": "blabla",
"iscategorical": "0"
},
{
"id": "blabla",
"iscategorical": "0"
}
],
"masks": [
"id": "valore"
],
"om_points": "value",
"parameters": [
"id": "valore"
]
}
我编写了以下脚本来打印所有JSON数据:
import json
from pprint import pprint
with open('data.json') as f:
data = json.load(f)
pprint(data)
但是,该程序会引发异常:
Traceback (most recent call last):
File "", line 5, in
data = json.load(f)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 13 column 13 (char 213)
如何解析JSON并提取其值?
#1楼
您的data.json应该如下所示:
{
"maps":[
{"id":"blabla","iscategorical":"0"},
{"id":"blabla","iscategorical":"0"}
],
"masks":
{"id":"valore"},
"om_points":"value",
"parameters":
{"id":"valore"}
}
您的代码应为:
import json
from pprint import pprint
with open('data.json') as data_file:
data = json.load(data_file)
pprint(data)
请注意,这仅在Python 2.6及更高版本中有效,因为它取决于with -statement 。 在Python 2.5中, from __future__ import with_statement ,在Python <= 2.4中,请参见Justin Peel的答案 ,该答案基于此。
您现在还可以像这样访问单个值:
data["maps"][0]["id"] # will return 'blabla'
data["masks"]["id"] # will return 'valore'
data["om_points"] # will return 'value'
#2楼
data = []
with codecs.open('d:\output.txt','rU','utf-8') as f:
for line in f:
data.append(json.loads(line))
#3楼
您的数据不是有效的JSON格式。 您应该有{}时拥有[] :
[]用于JSON数组,在Python中称为list
{}用于JSON对象,在Python中称为dict
JSON文件的外观如下:
{
"maps": [
{
"id": "blabla",
"iscategorical": "0"
},
{
"id": "blabla",
"iscategorical": "0"
}
],
"masks": {
"id": "valore"
},
"om_points": "value",
"parameters": {
"id": "valore"
}
}
然后,您可以使用您的代码:
import json
from pprint import pprint
with open('data.json') as f:
data = json.load(f)
pprint(data)
使用数据,您现在还可以找到类似的值:
data["maps"][0]["id"]
data["masks"]["id"]
data["om_points"]
试试看,看看是否有意义。
#4楼
“超JSON”或仅“ ujson”可以处理JSON文件输入中的[] 。 如果您正在将程序中的JSON输入文件作为JSON元素列表读取; 诸如[{[{}]}, {}, [], etc...] ujson可以处理字典列表的任意顺序,列表的字典。
您可以在Python包索引中找到ujson,并且该API与Python的内置json库几乎相同。
如果您要加载较大的JSON文件,则ujson也会更快。 与提供的相同链接中的其他Python JSON库相比,您可以看到性能详细信息。
#5楼
贾斯汀·皮尔(Justin Peel)的回答确实很有帮助,但如果您使用的是Python 3,则应按以下方式读取JSON:
with open('data.json', encoding='utf-8') as data_file:
data = json.loads(data_file.read())
注意:请使用json.loads而不是json.load 。 在Python 3中, json.loads采用字符串参数。 json.load采用类似文件的对象参数。 data_file.read()返回一个字符串对象。
老实说,在大多数情况下,将所有json数据加载到内存中都不是问题。