根据 JSON 文件获取对象的架构
Get schema of object according to JSON files
我有大量的JSON文件,从公共API中提取。借助 Node.js,我正在尝试获取文件正在描述的对象的模式(键/值类型),这与猫鼬中描述模式的方式相同,例如:
schema = {
key1: 'Number',
key2: 'Boolean',
key3: {
key31: 'String',
key32: 'Boolean'
},
key4: [{
key41: 'String',
key42: 'Number'
}]
};
为了做到这一点,我写了一个脚本,它获取第一个文件,获取键和值的类型(递归,因为对象有子对象);然后将第二个文件与第一个文件进行比较,如果第一个文件缺少一些键,则添加一些数据,依此类推......也许不是实现我想做的事情的最佳解决方案,但它(几乎)完成了工作。
不幸的是,运行脚本后,所有类型的子对象数组(上面示例中的key41
和key42
)都显示为string
,尽管我有一些boolean
,number
...
这是我从现在开始所做的:
var glob = require('glob'),
_ = require('lodash');
function getSchema(from, to) {
for (var kay in from) {
if (from.hasOwnProperty(key)) {
if (_.isObject(from[key])) {
//_.isObject() returns true for arrays
if (_.isArray(from[key])) {
if (!to.hasOwnProperty(key)) {
to[key] = [{}];
}
if (from[key].length) {
var tmp = {};
for (var i = 0; i < from[key].length; i++) {
getSchema(from[key][i], tmp);
}
getSchema(tmp, to[key][0]);
}
} else {
if (!to.hasOwnProperty(key)) {
to[key] = {};
}
getSchema(from[key], to[key]);
}
} else {
to[key] = typeof from[key];
}
}
}
};
glob('./data/**/*.json', {}, function(err, files) {
if (err) console.log(err);
var schema = {};
_.forEach(files, function(file) {
var data = require(file);
getSchema(data, schema);
});
//schema should be an object, mirroring the schema of the JSON files
});
有人可以帮我解决这个问题吗?
提前谢谢。
你的最后陈述,
to[key] = typeof from[key];
应该是
to[key] = from[key]
除非我读错了,并且示例键:值对包含"值"的实际值而不是类型。
相关文章:
- 在node.js中使用JavaScript从JSON对象获取和设置文本内容
- 如何在JavaScript中基于事件对象获取文件名
- 使用Lodash从JSON对象获取特定于环境的配置
- 从每个父对象获取attr,并为每个子对象设置attr
- 使用javascript从json对象获取父名称
- 从express请求对象获取客户端MAC地址
- 正在从JSON对象获取数组
- 使用生成的键从对象获取数据
- 如何在 C# 中从 JavaScript 对象获取值
- JavaScript |对象:获取属性忍者移动
- 从 CasperJS 中的嵌套 JavaScript 对象获取值
- 从 JSON 对象获取数据时出现问题
- Angularjs 从范围对象获取值
- 以点表示法计算字符串,以从视图中的对象获取相应的值
- 如何测试从promise对象获取数据的控制器
- Javascript-在for循环上从var中的对象获取适当性
- 在javascript中从json对象获取数据
- 如何从每个对象获取jQuery的“title”和“url”值
- 从react routers browserHistory对象获取当前页面路径
- 从Javascript对象获取CSV值