快速结构识别

时间:2018-10-18 12:50:01

标签: data-structures fingerprinting

我想知道一种聪明又有效的方法来区分另一个数据结构。

如果我们假设数据结构以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 SchemaXML Schema,...),但我认为这对于所讨论的问题有些“过度设计”。

您是否知道解决此问题和类似问题的更好方法?


编辑:更多示例

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#,这是一个普遍的问题。

0 个答案:

没有答案