是否有一个JS库会告诉我集合中每个属性的类型?
我有一个对象数组,这是SQL数据库查询的结果。
数据如下所示:
[{
id: "1",
email: "donnyp@gmail.com",
is_subscribed: null,
name: "Don P",
created_at: "2015-01-18 18:16:32"
},
{
id: "2",
email: "test@test.com",
is_subsribed: "t",
name: "Test Guy",
created_at: "2015-01-30 12:05:55"
},
...]
我想要一个对象告诉我每个"列的类型"。像这样:
{
id: "integer",
email: "string",
is_subscribed: "boolean",
name: "string",
created_at: "datetime"
}
编辑:这不像做typechecks那么简单。我在这里遇到的主要问题是所有值都是字符串,除了空值。这意味着我必须尝试将整个列强制转换为类型,然后检查该类型是否为整数。对我要检查的每种类型重复此操作。所以我将(要测试的类型数量)X(对象数量)X(列数#),这是很多要计算的,所以如果有更聪明的方式我会喜欢这样做。
编辑2 :如果您对某个问题进行了投票,请发表评论解释为什么作者可以改进问题。即使某些事情对你很明显,也可能不是作者(在这种情况下......我:P)。
答案 0 :(得分:1)
以下是使用JSON.parse
和typeof
识别类型的简单示例:
var o={
id: "1",
email: "donnyp@gmail.com",
is_subscribed: null,
name: "Don P",
created_at: "2015-01-18 18:16:32"
};
for(var it in o){ var v=o[it];
try{v=JSON.parse(v);}catch(y){} //try to turn strings into literals
if(!+v && Date.parse(v)){ v="date"; }else{ v=typeof v;} // find date strings (json encoded), not numbers
if(v=="object" && Array.isArray(o[it])) v="array"; // [] vs {}
if(v=="object" && !o[it]) v="null"; // null is and Object (doh!)
o[it]=v;
}
o;/* ~== {
"id": "number",
"email": "string",
"is_subscribed": "null",
"name": "string",
"created_at": "date"
};*/
它非常接近你的示例输出,但使用JS类型而不是SQL类型,JS无法从JSON实际确定,因为JSON使int
这样的特定数字类型不明确。