用于提取复杂json对象结构的工具



我有一个json对象的大集合:

[
  {'hash1': {prop1: 24, prop2: 11}},
  {'hash2': {prop1: 15, prop2: 'val'}},
  {'hash3': {prop1: 20, prop2: 2}},
  // ...1000s more like that
  {'hash4012': {prop1: 54, prop2: 2}, prop3: 'some string'},
  {'hash4013': {prop1: 98, prop2: 4}},
  //... more
  {'hash8202': {prop1: 21, prop2: 82}, prop3: {'key': 'value'}},
  {'hash8203': {prop1: 25, prop2: 'val2'}},
  //... more
]

在项目的任何地方都没有使用这个大散列定义模式。

我想要一个工具,当给定上面的哈希值时,输出如下:(我不关心确切的输出,它只是给你一个想法)

[
  {'string':                                           // 100%
     {prop1: integer, prop2: integer(67%),string(33%)} // 98%
     {string: {prop1: integer, prop2: integer}, prop3: // 2%
        'some string'                                  // 50% (1%)
        {'key': 'value'}                               // 50% (1%)
     }
  } 
]

意思是我看到了最常见的结构。

如果这样的工具不存在,你将如何实现它?

(我的用例是在现有项目中有mongo文档。因为任何地方都没有模式,所以我必须从生产数据中猜测结构。

将您的示例输入并使其有效JSON给出如下:

[
  {"hash1": {"prop1": 24, "prop2": 11}},
  {"hash2": {"prop1": 15, "prop2": "val"}},
  {"hash3": {"prop1": 20, "prop2": 2}},
  {"hash4012": {"prop1": 54, "prop2": 2}, "prop3": "some string"},
  {"hash4013": {"prop1": 98, "prop2": 4}},
  {"hash8202": {"prop1": 21, "prop2": 82}, "prop3": {"key": "value"}},
  {"hash8203": {"prop1": 25, "prop2": "val2"}}
]

现在,如果您对它进行美化(您可以使用:http://jsonprettyprint.com/),然后运行一些正则表达式替换(使用文本编辑器或脚本),使值成为它们的类型名称,例如:

  • 正则表达式替换字符串:':".+?"' => ':string'
  • Regex替换整数:':[0-9]+?' => ':integer'

然后您可以获取输出并运行:sort outputfile | uniq -c | sort -n -r。这将给你类似于:

  7    {
  7          "prop1":integer,
  6    },
  6       }
  5          "prop2":integer
  2       },
  2          "prop2":string
  1 ]
  1 [
  1    }
  1       "prop3":string
  1       "prop3":{
  1       "hash8203":{
  1       "hash8202":{
  1       "hash4013":{
  1       "hash4012":{
  1       "hash3":{
  1       "hash2":{
  1       "hash1":{
  1          "key":string

查看顶部的值会给你最常见的属性名和值类型对。使用缩进,您可以估计它在层次结构中的位置。

最新更新