pythonjson数据解析失败_为什么Python无法解析此JSON数据? [关闭]

博主遇到Python解析JSON文件时出现'Expecting ',' delimiter'的异常。问题在于JSON数据格式不正确,缺少{}包裹的对象。社区给出了修正后的JSON示例,并提供了多种解析JSON的方法,包括使用`json.load()`和`json.loads()`。还讨论了不同Python版本的差异以及处理大型JSON文件时的性能考虑。" 98482601,8710075,大数据项目:Java Web与Hive操作实践,"['大数据开发', 'Java开发', 'Hive数据库', '数据处理', 'Web开发']
摘要由CSDN通过智能技术生成

我在文件中有此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数据加载到内存中都不是问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值