|
import json |
|
import sys |
|
|
|
|
|
|
|
|
|
def extract_metadata(_file_path, _start_marker): |
|
local_metadata = "" |
|
|
|
with open(_file_path, "rb") as f: |
|
content = f.read() |
|
start_pos = content.find(_start_marker) |
|
|
|
if start_pos != -1: |
|
end_pos = start_pos |
|
brace_count = 0 |
|
for idx, b in enumerate(content[start_pos:]): |
|
if b == ord('{'): |
|
brace_count += 1 |
|
elif b == ord('}'): |
|
brace_count -= 1 |
|
|
|
if brace_count == 0: |
|
end_pos += idx |
|
break |
|
|
|
json_bytes = content[start_pos:end_pos + 1] |
|
content_str = json_bytes.decode("utf-8") |
|
try: |
|
local_metadata = json.loads(content_str) |
|
except json.JSONDecodeError as e: |
|
print(f"Error decoding JSON: {e}") |
|
|
|
return local_metadata |
|
|
|
|
|
def save_metadata_to_json(_metadata, _output_file): |
|
with open(_output_file, "w", encoding="utf-8") as f: |
|
json.dump(_metadata, f, ensure_ascii=False, indent=2) |
|
|
|
|
|
def extract_metadata_layer(json_data): |
|
local_metadata_layer = {} |
|
|
|
for key, value in json_data.items(): |
|
if key == "__metadata__": |
|
local_metadata_layer[key] = value |
|
elif isinstance(value, dict): |
|
extracted = extract_metadata_layer(value) |
|
if extracted: |
|
local_metadata_layer[key] = extracted |
|
|
|
return local_metadata_layer |
|
|
|
|
|
def load_json_file(_file_path): |
|
with open(_file_path, "r", encoding="utf-8") as f: |
|
return json.load(f) |
|
|
|
|
|
if __name__ == "__main__": |
|
if len(sys.argv) != 3: |
|
print("Usage: python module.py <input_file> <output_file>") |
|
sys.exit(1) |
|
|
|
file_path = sys.argv[1] |
|
output_file = sys.argv[2] |
|
|
|
|
|
start_marker = b'{"__metadata__":' |
|
|
|
|
|
metadata = extract_metadata(file_path, start_marker) |
|
|
|
|
|
save_metadata_to_json(metadata, output_file) |
|
|
|
|
|
data = load_json_file(output_file) |
|
|
|
|
|
metadata_layer = extract_metadata_layer(data) |
|
|
|
|
|
save_metadata_to_json(metadata_layer, output_file) |
|
|