Skip to content

Instantly share code, notes, and snippets.

@eugrus
Created July 29, 2023 22:49
Show Gist options
  • Save eugrus/322a1e61ff55f564ba05c632ce77651e to your computer and use it in GitHub Desktop.
Save eugrus/322a1e61ff55f564ba05c632ce77651e to your computer and use it in GitHub Desktop.
Конвертер JSON-бэкапов Workflowy.com в табулированный текст
#!/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