Python3 Json.loads常见错误处理

错误类型1  json.decoder.JSONDecodeError: Invalid control character
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author  : jia666
# Time    : 2021/5/7 16:03

import json
#TODO 1 json.decoder.JSONDecodeError: Invalid control character
s = '{"id":"2261", "text":"啦啦啦人贩子给力\n啊[cai晃头]"}'

#json_data = json.loads(s) # 错误复现
json_data = json.loads(s, strict=False) #正确使用
print(json_data)

'''正确的使用
json_data = json.loads(s, strict=False)
-----------------------------------------------------------------------------
如果strict为false(默认值为True),则字符串中允许使用控制字符。
此上下文中的控制字符是那些字符代码在0–31范围内的字符,
包括“\t”(制表符)、“\n”、“r”和“\0”。
'''
错误类型2 json.decoder.JSONDecodeError: Invalid \escape
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author  : jia666
# Time    : 2021/5/7 16:03
import json

# TODO 2 json.decoder.JSONDecodeError: Invalid \escape
s = '{"id":"2261", "text":"#李宇春奥迪之夜#我葱巨美~~~今天现场的灯牌实在是太BH咯~~\(≧▽≦)/~啦啦啦人贩子给力\n啊[cai晃头]"}'
#json_data = json.loads(s, strict=False) #错误复现
json_data = json.loads(s.replace('\\','\\\\'), strict=False) #正确使用
print(json_data)

错误类型3 json.decoder.JSONDecodeError: Expecting ','
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author  : jia666
# Time    : 2021/5/7 16:03
import json

# TODO 3 json.decoder.JSONDecodeError: Expecting ','
s0 = '{"id":"2261", "text":"#李宇春奥迪之夜#我葱巨美~~~今天现场的灯牌实在是太BH咯~~\(≧▽≦)/~啦啦啦人贩子给力\n啊[cai晃头]"'
s1 = '{"id":"2261", "text":"#李宇春奥迪之夜#我葱巨美~~~今天现场的灯牌实在是太BH咯~~\(≧▽≦)/~啦啦啦人贩子给力\n啊[cai晃头]"}'
#json_data = json.loads(s0.replace('\\','\\\\'), strict=False) #错误复现
json_data = json.loads(s1.replace('\\','\\\\'), strict=False) #正确使用
print(json_data)
'''
比较两个s0与s1,你会发现s0,最后少一个},无法构成字典,导致不能解析
因此多检查获取的数据格式是否正确
'''
错误类型4 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author  : jia666
# Time    : 2021/5/7 16:03
import json

#TODO 4 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes
s1 = {"id":"2261"}
#json_data = json.loads(str(s1), strict=False) #错误复现
json_data = json.loads(json.dumps(s1), strict=False) #正确使用
print(json_data)
'''
json.loads() ,要求json串格式中必须的双引号!!
字典转字符串:
方法一: json.dumps() ,不管字典里是单引号还是双引号,都可以用json.dumps()转换成字符串,且转后都为双引号!
方法二: str (),用str将字典转成字符串后,双引号变成了单引号
'''
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author  : jia666
# Time    : 2021/5/8 10:47
# -*- coding: utf-8 -*-

import demjson
import json
s = '{test:0,a:"000001_Unit_1. Hi,Birdie.mp3",b:"000005_Unit_2. Good morning,Miss Wang..mp3",c:"000008_Unit_3. What\'s your name_.mp3"}'
#json_data=json.loads(s) #错误复现

data1 = demjson.decode(s)
data2 = demjson.encode(data1)
json_data=json.loads(data2) 
print(json_data)

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
回答: json.loads在处理字符串转换为JSON对象时,常见报错有以下几种情况。首先,如果字符串的格式不符合JSON的规范,例如缺少引号或者只有一半的字符串,会报错ValueError: Expecting property name enclosed in double quotes。\[1\]其次,如果字符串为空或者包含无效的JSON内容,也会报错JSONDecodeError: Expecting value。\[2\]此外,当尝试错误地读取JSON文件或者读取空的JSON文件时,也会导致报错。在使用json.load()函数读取JSON文件时,需要确保文件存在且不为空,否则会报错。\[3\]因此,在使用json.loads时,需要注意字符串的格式和内容是否符合JSON的规范,以及读取的文件是否存在且不为空。 #### 引用[.reference_title] - *1* [json.loads问题终极解决方法](https://blog.csdn.net/weixin_42237113/article/details/130838109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [python load()遇到json文件空,报错](https://blog.csdn.net/beginner8363/article/details/127657965)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jia666666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值