2016-04-01 6 views
-3

コレクション内の各属性のタイプを教えてくれるJSライブラリがありますか?コレクションの各属性の「タイプ」を取得するにはどうすればよいですか?

私は、SQLデータベースクエリの結果であるオブジェクトの配列を持っています。

[{ 
    id: "1", 
    email: "[email protected]", 
    is_subscribed: null, 
    name: "Don P", 
    created_at: "2015-01-18 18:16:32" 
}, 
{ 
    id: "2", 
    email: "[email protected]", 
    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:質問をdownvoteする場合は、著者が質問を改善できる理由を説明するコメントを残してください。何かがあなたにはっきりしていても、それは著者(この場合は...私:P)にはないかもしれません。ここ

+0

'typeof null!== Boolean'と.... – Rayon

+0

この例では、各値は' null '以外の文字列(二重引用符で囲まれた文字列)のように見えます。 – AKS

+0

@rayon - それは単純ではありませんが、それらはすべてヌル以外の文字列(例を参照)として入ります。また、整数、ブール値、浮動小数点数、および文字列にのみJSタイプを使用できます。日付については、日付と日付の両方を解析し、それが動作するかどうかを調べる必要があります。 –

答えて

1

は、種類を識別するためにJSON.parsetypeofを使用しての簡単な例です:

var o={ 
    id: "1", 
    email: "[email protected]", 
    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のタイプを使用して代わりのJSが実際にJSONから判断することはできませんSQLタイプ、以来、 JSONは、intのような特定の数値タイプをあいまいにします。

関連する問題