一、背景
所负责的项目从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实现一个嵌套字典排序?
三、实现
3.1 实现思路
- 自己编程实现:呃呃~,对于一个菜鸟测试人员来说,这不是为难我嘛
- 搜索引擎上查查资料: 搜索结果五花八门,看着头大
- ChatGPT: 听说ta写代码能力很在行,今天试试看,说干就干
3.2 具体实现
流程图:
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 jsondef 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 dictionarydef read_data():with open('data_before_sort.json', 'r') as data_file:data = json.load(data_file)return dataif __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发现两个版本字母大小写不一致问题