Мне был предоставлен модуль Python "json parser", который анализирует файлы json и возвращает список структур из файла json. Меня попросили написать модуль python, который берет этот список и преобразует его в файл «.h», заполненный структурами c. Моя проблема в том, что файлы json могут содержать много вложенных списков (то есть вложенных списков во вложенных списках и т. Д. И т. Д.), И я просто не могу получить правильный код для доступа к ним.
Также каждый элемент в этих списках имеет пару ключ-значение, называемую «позиция», и я хочу иметь возможность сортировать структуры после этой пары ключ-значение и создавать файл «.h» с отсортированными структурами, но я не уверен, что мой код сделает свое дело.
Моя идея состояла в том, чтобы создать цикл for, который проходит по списку, и если он находит другой список в этом списке, проверяет этот вложенный список на наличие большего количества вложенных списков и т. Д. Я довольно новичок в python, могу ли я решить эту проблему с помощью рекурсивной функции ? Если да, то как?
способ просмотра списков (работает только для вложенных списков в первом списке)
def test(liste):
for inner_l in liste:
for item in inner_l:
print(item)
моя функция сортировки
def takeFourth(elem):
return elem[3]
neueListe = neueListe + x.sort(key=takeFourth)
ожидаемые результаты, конечный файл .h должен выглядеть следующим образом:
struct SubStructOfSubStruct
{
int MyInteger;
};
struct ThirdSubStructType
{
float MyFloatValue;
double MyDoubleValue;
struct SubStructOfSubStructType SubStructOfSubStruct;
};
struct SubStructType
{
float MyFloatValue;
double MyDoubleValue;
};
struct SecondSubStructType
{
int MyInteger;
};
struct Toplevel
{
struct ThirdSubStructType ThirdSubStruct;
struct SubStructType SubStruct;
char MyString[10];
boolean MyBoolValue;
double MyDoubleValue;
float MyFloatValue;
int MyInteger;
struct SecondSubStructType SecondSubStruct;
};
Это то место, где я нахожусь, это список, который возвращает анализатор, который я хочу просмотреть и создать структуры:
(последнее значение в списках - это значение позиции, по которому я хочу отсортировать)
[['SubStructOfSubStructType ', [['Integer', 'MyInteger', 33, 0]]],
['ThirdSubStructType ', [['TreeNode', 'SubStructOfSubStructType', 'SubStructOfSubStruct', 2], ['Double', 'MyDoubleValue', 100, 0], ['Float', 'MyFloatValue', 22, 1]]],
['SecondSubStructType', [['Integer', 'MyInteger', 333, 0]]],
['SubStructType', [['Double', 'MyDoubleValue', 1000, 0], ['Float', 'MyFloatValue', 222, 1]]],
['Toplevel', [['TreeNode', 'ThirdSubStructType', 'ThirdSubStruct', 7], ['Float', 'MyFloatValue', 2, 1], ['Boolean', 'MyBoolValue', False, 2], ['Double', 'MyDoubleValue', 10, 0], ['Integer', 'MyInteger', 3, 3], ['TreeNode', 'SecondSubStructType', 'SecondSubStruct', 6], ['String', 'MyString', 'Leer', 4], ['TreeNode', 'SubStructType','SubStruct',5]]]]