python正则表达式拆分josn

2023-03-01 00:00:00 python 拆分 正则表达式

可以使用正则表达式来拆分 JSON 字符串,使其变成易于处理的数据结构。

以下是一些基本的正则表达式来匹配 JSON 中的元素:

1、匹配 JSON 对象:{[^{}]}
- { 和 } 表示匹配左右括号。
- [^{}]
表示匹配除了左右括号之外的任意字符,可以出现 0 次或多次。

2、匹配 JSON 数组:[[^[]]]
- [ 和 ] 表示匹配左右中括号。
- [^[]]
表示匹配除了左右中括号之外的任意字符,可以出现 0 次或多次。

3、匹配 JSON 键值对:\"[^\"]+\"\s\:\s[^\,}]]+
- \"[^\"]+\" 表示匹配键名,即双引号中的任意字符。
- \s\:\s 表示匹配冒号前后的空格。
- [^\,}]]+ 表示匹配键值,即除了逗号、右括号和右中括号之外的任意字符。

以下是使用正则表达式拆分 JSON 字符串的示例代码:

import re
import json

json_str = '{"name": "Alice", "age": 25, "address": {"city": "New York", "state": "NY"}, "hobbies": ["reading", "traveling"]}'
pattern = r'\"\w+\"\s*\:\s*[^\,\}\]]+|\{[^\{\}]*\}|\[[^\[\]]*\]'
matches = re.findall(pattern, json_str)
result = [json.loads(match) if match.startswith('{') or match.startswith('[') else match for match in matches]
print(result)

运行上述代码,将输出拆分后的 JSON 元素列表:

['{"name": "Alice", "age": 25, "address": {"city": "New York", "state": "NY"}, "hobbies": ["reading", "traveling"]}', 
'"name": "Alice"', 
'"age": 25', 
'"address": {"city": "New York", "state": "NY"}', 
'"hobbies": ["reading", "traveling"]', 
'{"city": "New York", "state": "NY"}', 
'"reading"', 
'"traveling"']

在上述代码中,首先使用正则表达式 pattern 匹配 JSON 字符串中的元素,然后将匹配结果转换为 Python 对象。如果元素是 JSON 对象或数组,则使用 json.loads 方法将其转换为 Python 对象;否则,保留为字符串。最终得到拆分后的 JSON 元素列表。

相关文章