慕盖茨4494581
这个答案使用了@calceamenta的想法,但实现了实际的削减逻辑:def recursive_reduce(obj): if isinstance(obj, (float, str, int, bool, type(None))): return obj if isinstance(obj, dict): keys = list(sorted(obj)) obj['...'] = '...' if len(keys) > 5: new_keys = keys[:2] + ["..."] + keys[-2:] else: new_keys = keys new_dict = {x:obj[x] for x in new_keys} for k, v in new_dict.items(): new_dict[k] = recursive_reduce(v) return new_dict if isinstance(obj, list): if len(obj) > 5: new_list = obj[:2] + ["..."] + obj[-2:] else: new_list = obj for i, v in enumerate(new_list): new_list[i] = recursive_reduce(v) return new_list return str(obj)test_json = {"works": [1, 2, 3, 4, 5, 6], "not_affected": [{"1": "1", "2": "2", "3": "3", "4": "4", "5": "5"}], "1": "1", "2": "2", "3": "3", "removed": "removed" }print("original", test_json)reduced_log = recursive_reduce(test_json)print("reduced", reduced_log)输出:original {'works': [1, 2, 3, 4, 5, 6], 'not_affected': [{'1': '1', '2': '2', '3': '3', '4': '4', '5': '5'}], '1': '1', '2': '2', '3': '3', 'removed': 'removed'}reduced {'1': '1', '2': '2', '...': '...', 'removed': 'removed', 'works': [1, 2, '...', 5, 6]}希望这有助于:)