使用 ReJson 存储数值树

Using ReJson to store a numerical tree

我想在树中插入固定长度的数值,稍后检查它们是否存在。大多数数值都是相似的,所以将它们放在 SET 中没有意义,因为我会浪费 space.

由于 ReJson PATH 期望 "Java-like" 键名的命名约定,这就是我想出的:

{
  "_0": {
    "_1": {
      "_2": true
    }
  },
  "_2": {
    "_3": {
      "_4": true
    }
  }
}

所以,当我需要知道是否设置了“012”时,我需要检查是否 "JSON.GET key ._0._1._2" == true

最初,我尝试保存自然树值,例如:

{
  "0": {
    "1": {
      "2": true
    }
  },
  "2": {
    "3": {
      "4": true
    }
  }
}

但是我写不出任何能够遍历这棵树的PATH,无论是点还是括号形式。

有什么建议吗?我应该坚持我的带下划线的价值观和 ._a._b._c 模式还是有更好的方法?

ReJSON 使用类似于 JSONPath 的路径(但不完全是)。具体来说,docs 表示 "Names must begin with a letter, a dollar ($) or an underscore (_) character"。这意味着不支持您的第二棵树。

虽然 ReJSON 可用于存储树状结构,但您的用例似乎不会从中受益。相反,我会研究展平树并将其存储为哈希(甚至是集合),其中每个字段代表一个路径,例如:

HSET tree 0.1.2 1 2.3.4 1

然后你可以使用 HEXISTS 之类的东西来检查 "truthiness"。