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

时间:2014-07-17 19:24:54

标签: json schema

我有一大堆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文档。因为在任何地方都没有架构,我必须从生产数据中猜测结构。滚动数千条记录是乏味的。)

1 个答案:

答案 0 :(得分:0)

获取您的示例输入并使其有效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/),则运行一些正则表达式替换以将值设置为其类型名称(使用文本编辑器或脚本),例如:

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

然后你可以获取输出并运行它: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

因此,查看顶部值将为您提供最常见的属性名称和值类型对。使用缩进,您可以对其在层次结构中的位置进行猜测。