2017-09-15 14 views
0

NodeJSを使用して、さまざまな構造化フォーマットの情報を他のフォーマット(HTMLやテキストなど)に変換する必要があります。そこで、ソース形式をJSON-Schemasに基づいたJSONに変換する方法を取った。結果のJSONをPugテンプレートに基づくテキストに変換することもできます。JSONオブジェクトのデータを柔軟に標準化するベストプラクティス

私が今探しているのは、データを標準化してJSONの構造を単純化する柔軟な方法です。日付と時刻の形式

このようなオブジェクトの例としては、次のようになります。

{ 
    header: { 
     sender: { 
     // more properties 
     id: '12345'; 
     } 
     receiver: { 
     // more properties 
     id: '987654'; 
     } 
     date: { 
     date: '170910', 
     time: '0922' 
     } 
     // more properties 
    } 
    // more properties 
    someMore: { 
     birthdate: { 
      year: 2016, 
      month: 5, 
      day: 11 
     } 
     otherProperty: { 
      // more properties 
      date: '20170205' 
     } 
    }  
} 

私はアイデアを再帰的にオブジェクトのすべてのプロパティをループとは、地図を使用することです

{ 
    header: { 
     senderId: '12345', 
     receiverId: '987654' 
     date: '20170910T0922' 
    } 
    // more properties 
    someMore: { 
     birthdate: '20160511', 
     otherProperty: { 
     // more properties 
     date: '20170205' 
     } 
    } 
} 

にこれを変換したいです行動すべきあらゆる財産のためのエントリーを持っています。マップがチェックされ、それが機能を返す場合ではない プロパティが作成され、ループがオンになっている場合、関数は、実行されたキー各プロパティの

var map = new Map(); 
map.set('sender', getSender()); 
map.set('date', normalizeDate()); 
map.set('birthdate', normalizeDate()); 

しかし、私は以前この問題が解決されているという印象があるので、代わりに使用できるnpmパッケージがあるのだろうかと思いますか?

答えて

0

もう一度検索して別のJSONトランスを試してみたら、複数の 'ルール'を使って構造の一部を一度に簡単に変換できるので、dot-objectに解決しました。

私は、多くの一般的な正規化関数を書いて、最も明白なもの(性別と日付/時刻)を定式化し、さまざまな構造を単一の標準化された構造に変換して処理しました。適切な機能。

これは最もエレガントなアプローチではないかもしれませんが、私は時間的制約があり、これが機能します。

問題に記載されるように結果をソース変換するには、このコードを使用した:

const dot = require('dot-object'); 

const rules = { 
    'header.sender.id': 'header.senderId', 
    'header.receiver.id': 'header.receiverId' 
}; 

const target = {}; 

dot.transform(rules, src, target); 

// normalizing 

target.date = normalizeDate(target.date); 
target.someMore.birthdate = normalizeDate(target.someMore.birthdate); 
target.someMore.otherProperty.date = normalizeDate(target.someMore.otherProperty.date); 
関連する問題