#!/usr/bin/env python """A command line utility to merge two JSON files. This is a python program that merges two JSON files into a single one. The intended use for this is to combine generated 'compile_commands.json' files created by CMake when performing an LLVM runtime build. """ import argparse import json import sys def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( "-o", type=str, help="The output file to write JSON data to", default=None, nargs="?", ) parser.add_argument( "json_files", type=str, nargs="+", help="Input JSON files to merge" ) args = parser.parse_args() merged_data = [] for json_file in args.json_files: try: with open(json_file, "r") as f: data = json.load(f) merged_data.extend(data) except (IOError, json.JSONDecodeError) as e: continue # Deduplicate by converting each entry to a tuple of sorted key-value pairs unique_data = list({json.dumps(entry, sort_keys=True) for entry in merged_data}) unique_data = [json.loads(entry) for entry in unique_data] with open(args.o, "w") as f: json.dump(unique_data, f, indent=2) if __name__ == "__main__": main()