我有一大堆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文档。因为在任何地方都没有架构,我必须从生产数据中猜测结构。滚动数千条记录是乏味的。)
答案 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/),则运行一些正则表达式替换以将值设置为其类型名称(使用文本编辑器或脚本),例如:
然后你可以获取输出并运行它: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
因此,查看顶部值将为您提供最常见的属性名称和值类型对。使用缩进,您可以对其在层次结构中的位置进行猜测。