質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1732閲覧

jsonをcsvに変換する際、配列を含む列を別の列で出力したい

robert

総合スコア20

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/10/11 02:54

jsonをcsvに変換する際、配列を含む列を別々の列で出力したいです、

Node.jsのjson2csvを用いて変換を行っているのですが、以下のように配列が含まれるJSONファイルを別々の列として出力したいです。

JSON

1[ 2 {"name":"aaa","contents":["A","B"]}, 3 {"name":"bbb","contents":["C","D","E","F"]}, 4 {"name":"ccc","contents":["G","H","I"]}, 5]

####目標

namef0f1f2f3
aaaAB
bbbCDEF
cccGHI

####実際の出力

namearray
aaa["A","B"]
bbb["C","D","E","F"]
ccc["G","H","I"]

現在以下のプログラムで実行しています。

ソースコード

nodejs

1const Json2csvParser = require('json2csv').Parser; 2const fields = ['name', 'contents']; 3const myData = [ 4 {"name":"aaa","contents":["A","B"]}, 5 {"name":"bbb","contents":["C","D","E","F"]}, 6 {"name":"ccc","contents":["G","H","I"]}, 7]; 8 9const json2csvParser = new Json2csvParser({ fields }); 10const csv = json2csvParser.parse(myData); 11 12console.log(csv);

方法をご教授していただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Nodeはちょっとわからないけどjs的なアプローチ

javascript

1const myData = [ 2 {"name":"aaa","contents":["A","B"]}, 3 {"name":"bbb","contents":["C","D","E","F"]}, 4 {"name":"ccc","contents":["G","H","I"]}, 5]; 6const maxlen=Math.max.apply(null,myData.map(function(x){return x["contents"].length})); 7const myData2=[]; 8myData2.push(["name"]); 9[].push.apply(myData2[0],Array(maxlen).fill(null).map(function(x,y){return "f"+(y+1).toString();})); 10[].push.apply(myData2,myData.map(function(x){ 11 const ret=[]; 12 ret.push(x["name"]); 13 [].push.apply(ret,x["contents"]); 14 [].push.apply(ret,Array(maxlen-x["contents"].length).fill("")); 15 return ret; 16})); 17console.dir(myData2);

投稿2018/10/11 03:32

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

robert

2018/10/11 09:14

回答ありがとうございます。 自動でフィールド名までつける挙動で、自分の望んだ出力が得られて助かりました! まだjavascript初心者のため、このコードを参考に勉強していきたいと思います。
guest

0

今のソースだと「実際の出力」みたいに出力されるのが正常です。
なので、「目標」のように出力させるためには、データを再構築するしかありません。

nodejs

1const Json2csvParser = require('json2csv').Parser; 2const beforeData = [ 3 {"name":"aaa","contents":["A","B"]}, 4 {"name":"bbb","contents":["C","D","E","F"]}, 5 {"name":"ccc","contents":["G","H","I"]}, 6]; // 元のデータ 7 8// TODO 1: 各行の「contents」の最大長さを取得し、f0, f1, f2, f3.. みたいに名前をつけ、fieldsに追加します(この場合はbbbのせいで4) 9const fields = ['name', 'f0', 'f1', 'f2', 'f3']; 10 11// TODO 2: 「contents」の代わりに、上で設定したf0, f1, f2, f3..のようなjson keyにcontentsを再配置します。 12const fixedData = [ 13 {"name":"aaa","f0":"A","f1":"B","f2":"","f3":""}, 14 {"name":"bbb","f0":"C","f1":"D","f2":"E","f3":"F"]}, 15 {"name":"ccc","f0":"G","f1":"H","f2":"I","f3":""]}, 16]; // 再配置したデータの形 17 18const json2csvParser = new Json2csvParser({ fields }); 19const csv = json2csvParser.parse(fixedData); 20 21console.log(csv);

ソースの検証はしてませんが、TODOの方の実装が必要となります。
(もしこの再配置を自動化する方法をご存知の方はご指導お願いします:D)

投稿2018/10/11 03:30

yeondev

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

robert

2018/10/11 09:14

回答ありがとうございました。 データを再構築するという考え方はとても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問