Быстрая идентификация структуры - PullRequest
0 голосов
/ 18 октября 2018

Меня интересует умный и эффективный способ отличить структуру данных от другой.

Если предположить, что структуры данных хранятся в виде деревьев JSON в массиве, проблему можно обобщить следующим образом:

[
    // Type 1
    {
        "name" : "value",
        "key" : "other_value",
    },
    // Type 2
    {
        "name" : "value",
        "key" : "other_value",
        "another_key" : "another_value",
        "data" : [
            { "a" : 1 },
            { "a" : 2 },
            // ...
        ]
    },
    // ...
]

Возможные решения, которые я придумала, включают:

  1. Ручные жестко заданные правила, такие как if 'another_key' in data, но их будет сложно поддерживать, когда числозаписей данных и количество различных типов растет.
  2. Структурная дактилоскопия: хеширование всего дерева, кроме листьев, и использование хеша для идентификации уникальной структуры данных.Это было бы хорошим решением, если бы число записей в "data" : [ ... ] было фиксированным.
  3. Схемы ( Схема 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 #, это общий вопрос.

...