赞
踩
所负责的项目从v1.0升级到v2.0之后,发送到kafka的Json数据字段顺序和内容有所改变,
v1.0版本推送数据样例:
{
"name": "小王子",
"author": "安托万·德·圣-埃克苏佩里(1900-1944)",
"platform": "京东",
"detailinfo": {
"commodity code": "12157218",
"published date": "2017-02-01",
"published house": " 浙江文艺出版社",
"number of pages": 208
},
"content": "遥远星球上的小王子,与美丽而骄傲的玫瑰吵架负气出走,在各星球漫游中,小王子遇到了傲慢的国王,一个任性的酒鬼,一个唯利是图的商人,一个死守教条的地理学家,而后来到地球上,试图找到治愈孤独和痛苦的良方。这时,他遇到一只渴望被驯养的狐狸,于是奇妙而令人惊叹的事情发生了",
"price": 26.5
}
v2.0版本推送数据样例:
{
"name": "小王子",
"author": "安托万·德·圣-埃克苏佩里(1900-1944)",
"content": "遥远星球上的小王子,与美丽而骄傲的玫瑰吵架负气出走,在各星球漫游中,小王子遇到了傲慢的国王,一个任性的酒鬼,一个唯利是图的商人,一个死守教条的地理学家,而后来到地球上,试图找到治愈孤独和痛苦的良方。这时,他遇到一只渴望被驯养的狐狸,于是奇妙而令人惊叹的事情发生了",
"detailinfo": {
"published house": " 浙江文艺出版社",
"published date": "2017-02-01",
"commodity code": "12157218",
"number of pages": 208
},
"Price": 26.5,
"platform": "京东"
}
为了方便diff出两个版本的数据差异,需要先对字典数据进行排序
如何用Python3实现一个嵌套字典排序?
流程图:
ChatGPT问答结果
def recursive_dict_sort(dictionary):
if isinstance(dictionary, dict):
return {k: recursive_dict_sort(v) for k, v in sorted(dictionary.items())}
elif isinstance(dictionary, list):
return [recursive_dict_sort(v) for v in dictionary]
else:
return dictionary
完整程序代码:
import json def recursive_dict_sort(dictionary): if isinstance(dictionary, dict): return {k: recursive_dict_sort(v) for k, v in sorted(dictionary.items())} elif isinstance(dictionary, list): return [recursive_dict_sort(v) for v in dictionary] else: return dictionary def read_data(): with open('data_before_sort.json', 'r') as data_file: data = json.load(data_file) return data if __name__ == '__main__': kafka_data = read_data() res = recursive_dict_sort(kafka_data) res = json.dumps(res,indent=4, ensure_ascii=False) #格式化json输出 with open('data_after_sort.json', 'w', encoding='utf-8') as f: f.writelines(res) print(res)
排序前diff:
排序后diff:
进行diff,惊喜发现,price中的p字母,两个版本大小写不一致,喜提一个bug
diff发现两个版本字母大小写不一致问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。