栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 992)问题解决方法,读取多个json对象

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 992)问题解决方法,读取多个json对象

在用Python中json.load()方法读取json文件时产生了这个错误,原因是这个方法只能读取一个json对象,换句话说只能读取一个花括号里的内容,但是绝大部分的json文件都是好多个json对象的,也就是有好多组花括号,这个时候json.load()方法就不在适用了(其只能读取单个json对象)。下面代码是我的json文件的一个截取,里面有5个对象。

{"id": 1, "corner_2d_gt": [[332.82528011252606, 173.49186722365627], [323.3667158966044, 125.40668535608732], [397.3930556606747, 161.63712786464984], [393.3849622238311, 112.21991031697068], [336.5279893659714, 197.15268313965993], [326.97169082502995, 148.99942506328279], [403.8074402964834, 184.95541873584958], [400.1901449692861, 135.37867319566013]], "corner_2d_pred": [[333.41251741366585, 173.8962171885509], [322.71542129167335, 125.12418415881216], [398.31252894955963, 161.80632714171173], [392.9766734206176, 111.54227064502327], [336.4702501231899, 197.27287780710165], [325.54706023536795, 148.29315047047896], [404.1747916012793, 184.8843504326774], [399.10722672092663, 134.31472677802563]], "corner_3d": [[-0.033737, -0.061801, -0.045446], [-0.033737, -0.061801, 0.072011], [-0.033737, 0.065832, -0.045446], [-0.033737, 0.065832, 0.072011], [0.033274, -0.061801, -0.045446], [0.033274, -0.061801, 0.072011], [0.033274, 0.065832, -0.045446], [0.033274, 0.065832, 0.072011]]}
{"id": 2, "corner_2d_gt": [[332.282832265513, 177.74708842443877], [322.1322074684033, 128.0599218762468], [396.8761945069274, 165.22293588590767], [391.92057573351394, 114.20495805809377], [336.0625995033001, 200.32112905918802], [325.74954055470886, 150.1839699544753], [403.52805851140715, 187.3810454230158], [398.9026547290426, 135.81092894026156]], "corner_2d_pred": [[332.27075128918, 173.3114207247405], [323.1136876512219, 123.96197955370098], [397.55524291362457, 162.4495276278669], [393.85748910969033, 111.82220037494498], [335.32701048082885, 196.76973149739635], [326.0146546225744, 147.19774336534078], [403.43087742465514, 185.60616164407097], [400.0811323012833, 134.66824831329302]], "corner_3d": [[-0.033737, -0.061801, -0.045446], [-0.033737, -0.061801, 0.072011], [-0.033737, 0.065832, -0.045446], [-0.033737, 0.065832, 0.072011], [0.033274, -0.061801, -0.045446], [0.033274, -0.061801, 0.072011], [0.033274, 0.065832, -0.045446], [0.033274, 0.065832, 0.072011]]}
{"id": 3, "corner_2d_gt": [[338.03769414953825, 172.57385195648496], [327.57974625614077, 122.6252162359196], [405.4718972781816, 160.00877109100233], [400.9725613048024, 108.44580912614246], [341.6499950337399, 197.4556862781038], [331.0386350646985, 147.48515293491693], [412.03484096777083, 184.5783965601076], [407.9402685611745, 132.8875236494535]], "corner_2d_pred": [[337.7027067462394, 172.74342345654097], [327.1250059727003, 121.5774764342749], [406.1133418057587, 160.59436522355205], [401.58487393896354, 107.7919939027118], [340.88246553724645, 197.68746940200833], [330.09276736943025, 146.38932612684397], [412.36673603924106, 185.25158296544302], [408.20853940022465, 132.20883453601445]], "corner_3d": [[-0.033737, -0.061801, -0.045446], [-0.033737, -0.061801, 0.072011], [-0.033737, 0.065832, -0.045446], [-0.033737, 0.065832, 0.072011], [0.033274, -0.061801, -0.045446], [0.033274, -0.061801, 0.072011], [0.033274, 0.065832, -0.045446], [0.033274, 0.065832, 0.072011]]}
{"id": 4, "corner_2d_gt": [[348.9738816968472, 184.06498671441707], [345.71458621717545, 136.81055839567514], [418.60462948932354, 179.9233843671921], [422.1796719298634, 131.88270602998853], [350.1743040167984, 212.15083280790975], [346.8962079113716, 165.7131295544992], [422.57263119598866, 208.05788467360787], [426.7118969339317, 160.8114056855011]], "corner_2d_pred": [[349.1536366015441, 184.45518950672877], [345.9568809543495, 136.27088711508665], [418.6824461042446, 180.95691455299684], [422.16508693120437, 132.01191724709986], [349.89025866943, 211.94709890729547], [346.62499464219627, 164.36711545230378], [422.2582771163013, 208.53547754633604], [426.25756258718604, 160.17495951996767]], "corner_3d": [[-0.033737, -0.061801, -0.045446], [-0.033737, -0.061801, 0.072011], [-0.033737, 0.065832, -0.045446], [-0.033737, 0.065832, 0.072011], [0.033274, -0.061801, -0.045446], [0.033274, -0.061801, 0.072011], [0.033274, 0.065832, -0.045446], [0.033274, 0.065832, 0.072011]]}
{"id": 5, "corner_2d_gt": [[318.99177107772766, 173.9092471579019], [317.6177862727439, 132.84002029051865], [386.93490502037895, 171.67309133664995], [392.7238566039595, 130.40620903805765], [320.0039282955117, 203.95627761181115], [318.6925317733053, 164.7352558133339], [390.08086672293996, 201.62388974351532], [396.4146992571544, 162.1860560771161]], "corner_2d_pred": [[318.9653997124559, 173.96782910637012], [318.92184796585013, 132.7254515733412], [385.2321838231528, 172.27904774269464], [391.8857200807338, 131.0087979144264], [320.1503098856698, 202.86872968642928], [320.22962714145905, 163.2042088942093], [388.5243114112471, 201.03237244935482], [395.7563951715347, 161.31790429639977]], "corner_3d": [[-0.033737, -0.061801, -0.045446], [-0.033737, -0.061801, 0.072011], [-0.033737, 0.065832, -0.045446], [-0.033737, 0.065832, 0.072011], [0.033274, -0.061801, -0.045446], [0.033274, -0.061801, 0.072011], [0.033274, 0.065832, -0.045446], [0.033274, 0.065832, 0.072011]]}

怎么办,用新的方法来读取,导入jsonlines包
在虚拟环境中输入:

pip install jsonlines

这里对json文件的格式输入有要求,每一个json对象后面要加入一个“n”换行符,生成json文件格式可以这么写:

        anno_path = './test.json'
        instance = {'id': img_id,'corner_2d_gt': corner_2d_gt.tolist(), 'corner_2d_pred': corner_2d_pred.tolist(),'corner_3d': corner_3d.tolist()}
        with open(anno_path, 'w') as f:
            json.dump(instance, f)
            f.write("n")

anno_path是路径名,instance是集合,有的需要把数据类型转换为list类型。
解析的时候:

for pop_dict in jsonlines.Reader(open(anno_path, 'r')):
    img_id = pop_dict['id']
    corner_2d_gt = pop_dict['corner_2d_gt']
    corner_2d_pred = pop_dict['corner_2d_pred']
    corner_2d_gt = np.array(corner_2d_gt)
    corner_2d_pred = np.array(corner_2d_pred)
    rgb_path = os.path.join(path, '{}.jpg'.format(img_id-1))
    img = Image.open(rgb_path)

这样即可,我这个例子中,刚开始的array类型需要变为lsit,读取后再变回array类型才能使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号