_________ / LyCORIS_mover /lora_json_extractor.py
Default38693's picture
Upload 4 files
65c703b
import json
import sys
# 既存の関数 (extract_metadata と save_metadata_to_json) は変更せずに再利用できます。
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)
# メタ情報を整形して JSON ファイルに保存
save_metadata_to_json(metadata, output_file)
# JSON ファイルを読み込む
data = load_json_file(output_file)
# "__metadata__" 階層のみを抽出
metadata_layer = extract_metadata_layer(data)
# "__metadata__" 階層のみを含む JSON ファイルに保存
save_metadata_to_json(metadata_layer, output_file)