Меня интересует умный и эффективный способ отличить структуру данных от другой.
Если предположить, что структуры данных хранятся в виде деревьев JSON в массиве, проблему можно обобщить следующим образом:
[
// Type 1
{
"name" : "value",
"key" : "other_value",
},
// Type 2
{
"name" : "value",
"key" : "other_value",
"another_key" : "another_value",
"data" : [
{ "a" : 1 },
{ "a" : 2 },
// ...
]
},
// ...
]
Возможные решения, которые я придумала, включают:
- Ручные жестко заданные правила, такие как
if 'another_key' in data
, но их будет сложно поддерживать, когда числозаписей данных и количество различных типов растет. - Структурная дактилоскопия: хеширование всего дерева, кроме листьев, и использование хеша для идентификации уникальной структуры данных.Это было бы хорошим решением, если бы число записей в
"data" : [ ... ]
было фиксированным. - Схемы ( Схема JSON , Схема XML , ...), ноЯ чувствую, что это немного «чрезмерно спроектировано» для рассматриваемой проблемы.
Вам известен какой-либо лучший способ решения этой и подобных проблем?
Править: больше примеров
class Book {
public int id;
public string title;
}
class BookWithAuthor : Book {
public string author;
}
class BookWithMultipleAuthors : BookWithAuthor {
public string[] moreAuthors; // array structure
}
class BookWithSequel : BookWithAuthor {
public Book sequel; // list structure
}
class BookWithSequelsAndSpinoffs : BookWithAuthor {
public BookWithAuthor[] sequels;
public Book[] spinoffs;
// tree structure
}
Представьте себе (прерванную) сериализацию Book[] books
без информации о том, что это за книга, и нужно восстановить исходный формат (или что-то эквивалентное).
Кроме того, для простоты я использовал C #, это общий вопрос.