2016-09-26 17 views
0

JSONオブジェクトをjavascriptのCSVファイルに変換しようとしています。複数のJSONオブジェクトからCSVへの変換

私はあらゆる種類のライブラリとあらかじめ用意されている関数を使用していますが、JSONがネストするとすぐに私のために何も動作しないようです。

これは私が使用している機能の一つである:

function ConvertToCSV(objArray) { 
     var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; 
     var str = ''; 

     for (var i = 0; i < array.length; i++) { 
      var line = ''; 
      for (var index in array[i]) { 
       if (line != '') line += ',' 

       line += array[i][index]; 
      } 

      str += line + '\r\n'; 
     } 

     return str; 
    } 

私は人々があなたのJSONオブジェクトの複雑さは、あなたの出力にに影響をすべきではないと言うが、私は取得していますすべてがある見てきました。

オンラインjson to csvコンバーターは、プロパティが二重にネストされていると、実際には余分なヘッダー付きのcsvファイルを作成することができます。 このような関数を書く方法の正しい方向のヒントは本当にありがたいです。あなたがこれを行うことができるライブラリを知っていればそれも素晴らしいでしょう!

(単層jsonオブジェクトを使用すると、csvファイルは[object、Object]を表示せず、代わりに素晴らしいCSVファイルを表示します。それはもう働きません)

UPDATE:これは、要求されているように、これは作業中のJSONファイルの種類です。

[ 
{ 
"HEADER": { 
    "SEARCH": "Zoeken", 
    "FILTER": "Filter", 
    "MISC": "Overige" 
}, 
    "FORM": { 
    "REQUIRED": "Dit veld is verplicht", 
    "MINLENGTH": "De input is te kort", 
    "MAXLENGTH": "De input is te lang", 
    "EMAIL": "Geen geldig e-mailadres" 
}, 
"TODO": "TODO: Hier moet nog een leuke tekst komen! dit komt uit een vertaling, in dit geval Nederlands. Nu is Nederlands natuurlijk op dit moment de enige taal maar het zou mooi zijn als hier in de toekomst veer vertalingen bij komen..." 
} 
] 

また、私は、私は出力として[Objectオブジェクト]を得ることはありません「agnes.js」を使用する場合ことを追加したいが、代わりにすべての単一の文字がお互いの下に追加され、1以下ではありませんカラム。オブジェクト構造以来

+0

あなたのオブジェクトの例を追加してください。 –

+0

私はあなたのサンプルコードを試してみました。私は '[オブジェクトオブジェクト]'を取得していません –

+0

@ NinaScholzは私のjsonの例を追加 –

答えて

0

自明な解は

function ConvertToCSV(objArray) { 
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; 
    var str = ''; 

    for (var i = 0; i < array.length; i++) { 
     var line = ''; 
     for (var index in array[i]) { 
      if (line != '') line += ','; 

      // If array[i][index] is an object then we loop over its properties 
      // And add it to the CSV string in a similar manner 
      if (typeof array[i][index] === 'object') { 
       var inner_obj = array[i][index]; 

       for (var index1 in inner_obj) { 
        if (line != '') line += ',' 

        line += '"' + inner_obj[index1] + '"'; 
       } 
      } else { 
       line += '"' + array[i][index] + '"'; 
      } 
     } 

     str += line + '\r\n'; 
    } 
    return str; 
} 

EXPLANATION

私はarray[i][index]がオブジェクトであるかどうかを確認するためにif-elseチェックを実行されたなかったものを、一貫性を維持します。それがオブジェクトの場合、プロパティのループを実行し、前と同じようにCSV文字列に追加します。

また、,の文字列がCSVの要素セパレータとして誤って解釈されないように、すべての要素の周りに引用符を配置しました。

+0

Yay!少なくとも私はcsvファイルに値を取得しています。 しかし、残っている問題は1つだけです。すべてのタイトルがなくなり、現在は1行になっています。これを追加する方法を知っていますか?あるいは、私の機能が最初にこれらを追加しないのですか? 私は入れ子を取り除き、より簡単に保つべきだと思っています。 –

+0

タイトルごとにヘッダーを意味していますか?いいえ、関数はヘッダーを処理しません。 –

+0

@MaxTaylorあなたが助けてくれれば、この回答をupvote/acceptするべきです。 –