Не такая уж тривиальная задача, на самом деле.
С точки зрения упрощения работы с этим списком в коде, я бы сформировал его так:
{
"Toyota": {
"Corolla": {
"Поколение 1990-97": null,
"Поколение 1999-2002": null,
"Поколение 2001 -2004": null
},
"Rav 4": null,
"Land Cruiser": null,
"Avensis": null
},
"Volkswagen": null,
"Ford": null
}
В итоге всего два варианта:
объект или
null. Вместо
null можно использовать любой простой тип: строку, true/false или число, но
null мне кажется самым лучшим вариантом - он показывает, что вложенного объекта нет.
Поколения Короллы, например, можно было бы представить в виде массива, но тогда добавится третий тип, который нужно будет обрабатывать. Судя по всему, этот объект нужно будет обходить рекурсивно, а рекурсия сама по себе может запутать, не стоит усложнять себе работу зоопарком вариантов ветвления.