python输出json字符串的展开形式

本文介绍如何在Shell中使用Python的json模块,通过indent参数实现字典的层次化打印,包括处理中文字符和解析json字符串的方法。

假设我们有一个字典dct,我们想在shell里print这个字典,而且能够得到层次分明的输出,可以使用以下方法:

import json
dct = {}
print(json.dumps(dct, indent=2))

参数indent表示缩进距离。如果是0的话效果仍然是一团。

有的时候dct里面含有中文,可以作如下修改:

import json
dct = {}
print(json.dumps(dct, ensure_ascii=False, indent=2))

如果拿到的是一串json字符串想要输出成展开的格式,可以先loadsdumps。(反正拿到这串字符串也是要loads作分析的)

Python中解析JSON字符串时,如果遇到转义字符处理不当,可能会导致解析失败。以下是几种常见的解决方案: 1. **确保输入的JSON字符串格式正确** JSON要求字符串必须使用双引号包裹,且特殊字符(如反斜杠、换行符等)需要正确转义。如果原始字符串中包含未正确转义的字符,可以先使用 `json.dumps` 对字符串进行预处理,以确保其符合JSON格式要求。 ```python import json raw_str = 'This is a string with "quotes" and \\backslashes\\' safe_str = json.dumps(raw_str) # 自动处理转义字符 print(safe_str) # 输出:"This is a string with \"quotes\" and \\backslashes\\" ``` 2. **使用 `json.loads` 解析嵌套JSON字符串时的处理** 如果JSON字符串中包含嵌套的JSON字符串(即某个字段的值本身是一个JSON字符串),直接使用 `json.loads` 解析外层JSON后,还需要再次解析该字段的值。此时应确保内层字符串也是合法的JSON格式。 ```python import json nested_json_str = '{"json": "{\\"key1\\": \\"value1\\", \\"key2\\": \\"value2\\"}"}' outer_data = json.loads(nested_json_str) inner_data = json.loads(outer_data["json"]) # 二次解析嵌套的JSON字符串 print(inner_data) # 输出:{'key1': 'value1', 'key2': 'value2'} ``` 3. **处理不规则或非标准JSON字符串** 有时从网络爬取的数据可能不符合标准JSON格式(如键未使用双引号包裹),此时可以使用第三方库 `demjson` 来解析。 ```bash pip install demjson ``` ```python import demjson irregular_json_str = "{name: 'John', age: 30}" # 键未使用双引号,值使用单引号 data = demjson.decode(irregular_json_str) print(data) # 输出:{'name': 'John', 'age': 30} ``` 4. **异常捕获与调试** 在解析JSON字符串时,建议使用 `try-except` 块捕获 `json.JSONDecodeError` 异常,以便在解析失败时进行调试或提供更友好的错误提示。 ```python import json invalid_json_str = '{"name": "John", "age": 30' # 缺少结尾的花括号 try: data = json.loads(invalid_json_str) except json.JSONDecodeError as e: print(f"JSON解析失败: {e}") ``` 5. **手动修复JSON字符串中的转义问题** 如果JSON字符串中存在未正确转义的引号或反斜杠,可以在解析前使用字符串替换方法进行修复。例如,将单引号替换为双引号,或对未正确转义的反斜杠进行处理。 ```python raw_json_str = "{'name': 'John', 'bio': 'He said, \"I\\'m happy!\"'}" fixed_json_str = raw_json_str.replace("'", '"').replace('\\', '\\\\') data = json.loads(fixed_json_str) print(data) # 输出:{'name': 'John', 'bio': "He said, \"I'm happy!\""} ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

73826669

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

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

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

打赏作者

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

抵扣说明:

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

余额充值