我有一个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
查看顶部的值会给你最常见的属性名和值类型对。使用缩进,您可以估计它在层次结构中的位置。