要分别选择BBBBB@4##、AAAAA@5##、AAAAA@6##
JSON
x = {'d': 'BBBBB@4##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", "pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", "pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}AAAAA@5##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", "pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", "pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}AAAAA@6##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", "pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", "pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}'}Python代码
x['d']['AAAAA@5##']预期选定结果
{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", "pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", "pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}发布于 2021-07-04 08:35:13
我建议使用一个简单的正则表达式来提取每个AAAA@X##{...}块并使用它们构建一个新的字典
import json
import re
x = {'d': 'AAAAA@4##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", '
'"pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", '
'"pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}'
'AAAAA@5##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", '
'"pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", '
'"pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}'
'AAAAA@6##{"pp-0": "1000", "pp-1": "1001", "pp-2": "1002", "pp-3": "1003", "pp-4": "1004", '
'"pp-5": "1005", "pp-6": "1006", "pp-7": "1007", "pp-8": "1008", "pp-9": "1009", "pp-10": "1010", '
'"pp-11": "1011", "pp-12": "1012", "pp-13": "1013", "pp-14": "1014", "pp-17": "1015", "pp-27": "1016"}'}
result = {}
for key, val in re.findall(r"(AAAAA@\d+##)({.*?})", x['d']):
result[key] = json.loads(val)
print(result.keys()) # dict_keys(['AAAAA@4##', 'AAAAA@5##', 'AAAAA@6##'])
print(result['AAAAA@4##']) # {'pp-0': '1000', ... 'pp-27': '1016'}如果标识符可以是另一种形式,请更改regex,下面是几个示例
([A-Z]{5}@\d+##):5个大写字母而不是5个A([A-Za-z]{2,5}@\d+##):2到5个字母而不是5A发布于 2021-07-04 08:38:28
键d‘下的值是字符串,甚至不是有效的json。
正确的答案是在尝试使用数据格式之前先修正它。
..。但是,如果不能,您将不得不尝试将其转换为这样一个有效的json (,它远非防弹):
>>> x['d'] = json.loads('{"' + x['d'].replace('##{', '##": {').replace('}A','}, "') + "}")
>>> x['d']['AAAA@5##']
{'pp-0': '1000', 'pp-1': '1001', 'pp-2': '1002', 'pp-3': '1003', 'pp-4': '1004', 'pp-5': '1005', 'pp-6': '1006', 'pp-7': '1007', 'pp-8': '1008', 'pp-9': '1009', 'pp-10': '1010', 'pp-11': '1011', 'pp-12': '1012', 'pp-13': '1013', 'pp-14': '1014', 'pp-17': '1015', 'pp-27': '1016'}https://stackoverflow.com/questions/68242906
复制相似问题