如何在Ansible中解析字典并清理message字段冗余内容?
问题描述
我有如下格式的字典数据:
{ "json_response": [ { "message": "The value is 1505. xxxxxxx: xxxxxx: This is a big value. xxxxx.", "value": "1505" }, { "message": "The value is 5. xxxxxxx: xxxxxxx: This is a small value. xxxxx.", "value": "5" }, { "message": "The value is 500. xxxxxxx: xxxxxxx: This is a medium value. xxxxx.", "value": "500" } ] }
需要对其中的message字段进行解析,去除冗余内容后得到如下目标输出:
{ "json_response": [ { "message": "The value is 1505. This is a big value.", "value": "1505" }, { "message": "The value is 5. This is a small value.", "value": "5" }, { "message": "The value is 500. This is a medium value.", "value": "500" } ] }
实现方案
可以用Python快速处理,这里提供两种简单的实现方式:
方法一:字符串分割法(格式固定时优先使用)
利用字符串分割提取需要保留的部分,逻辑简单直接:
original_data = { "json_response": [ { "message": "The value is 1505. xxxxxxx: xxxxxx: This is a big value. xxxxx.", "value": "1505" }, { "message": "The value is 5. xxxxxxx: xxxxxxx: This is a small value. xxxxx.", "value": "5" }, { "message": "The value is 500. xxxxxxx: xxxxxxx: This is a medium value. xxxxx.", "value": "500" } ] } # 遍历每个元素处理message字段 for item in original_data["json_response"]: # 按句号分割字符串 parts = item["message"].split(".") # 提取第一部分(数值描述)和倒数第二部分(大小描述),拼接成新的message item["message"] = f"{parts[0]}. {parts[-2]}." # 输出处理后的结果 import json print(json.dumps(original_data, indent=2))
方法二:正则表达式法(格式有变化时更灵活)
用正则表达式精准匹配需要保留的内容,适配更多格式变化:
import re import json original_data = { "json_response": [ { "message": "The value is 1505. xxxxxxx: xxxxxx: This is a big value. xxxxx.", "value": "1505" }, { "message": "The value is 5. xxxxxxx: xxxxxxx: This is a small value. xxxxx.", "value": "5" }, { "message": "The value is 500. xxxxxxx: xxxxxxx: This is a medium value. xxxxx.", "value": "500" } ] } # 定义正则模式,捕获两个关键部分 pattern = r"(The value is \d+\.).*(This is a \w+ value\.)" for item in original_data["json_response"]: match_result = re.search(pattern, item["message"]) if match_result: # 拼接捕获到的两个部分作为新的message item["message"] = f"{match_result.group(1)} {match_result.group(2)}" # 输出处理后的结果 print(json.dumps(original_data, indent=2))
内容的提问来源于stack exchange,提问作者asking
相关产品推荐
相关产品推荐

