Created
July 29, 2023 22:49
-
-
Save eugrus/322a1e61ff55f564ba05c632ce77651e to your computer and use it in GitHub Desktop.
Конвертер JSON-бэкапов Workflowy.com в табулированный текст
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import sys | |
import json | |
import csv | |
# Функция для рекурсивного обхода JSON-структуры и извлечения значений тега "nm" | |
def extract_nm_values(data, level=0): | |
nm_values = [] # Создаем список для хранения значений тега "nm" | |
if isinstance(data, list): | |
for item in data: # Обходим элементы массива | |
nm_values.extend(extract_nm_values(item, level + 1)) # Рекурсивно обрабатываем каждый элемент | |
elif isinstance(data, dict): | |
if "nm" in data: | |
# Если в текущем объекте есть тег "nm", добавляем его значение с учетом уровня вложенности | |
nm_values.append(("\t" * level) + data["nm"]) | |
for value in data.values(): | |
# Рекурсивно обрабатываем все значения текущего объекта | |
nm_values.extend(extract_nm_values(value, level + 1)) | |
return nm_values | |
def convert_to_tabular(input_file): | |
with open(input_file, 'r', encoding='utf-8') as file: | |
data = json.load(file) # Загружаем JSON-данные из файла | |
# Извлекаем значения тега "nm" из всех уровней вложенности с помощью функции extract_nm_values | |
nm_values = extract_nm_values(data) | |
# Выводим значения в табулированном формате в stdout | |
writer = csv.writer(sys.stdout, delimiter='\t') | |
writer.writerows([[value] for value in nm_values]) | |
if __name__ == "__main__": | |
if len(sys.argv) != 2: | |
print("Provide a JSON file as an argument!") # Проверяем, что передан файл JSON в аргументах командной строки | |
else: | |
input_json_file = sys.argv[1] # Получаем путь к JSON-файлу из аргументов командной строки | |
convert_to_tabular(input_json_file) # Вызываем функцию для конвертации и вывода данных в табулированном формате |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment