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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

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

JavaScript

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

Q&A

解決済

2回答

3516閲覧

json2csvで出力される列の順番を変えたい

robert

総合スコア20

Node.js

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

JavaScript

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

0グッド

1クリップ

投稿2018/10/11 08:05

編集2018/10/12 01:34

json2csvで出力される列の順番を変えたい

jsonファイルをcsvに変換してくれるNode.jsのライブラリjson2csvを用いて、以下のJSONファイルをcsvに変換しました。
JSONファイルはもともと配列を値としてもっていて、それを展開したものを使用しています。

JSON

1// 元のJSONファイル 2[ 3 {"name":"aaa","contents":["A","B"],"num":["1","2","3"]}, 4 {"name":"bbb","contents":["C","D","E","F"],"num":["4"]}, 5 {"name":"ccc","contents":["G","H","I"],"num":["5","6","7","7"]} 6]

json

1// 配列を展開したJSONファイル 2[ 3 { 4 "name": "aaa", 5 "contents_0": "A", 6 "contents_1": "B", 7 "num_0": "1", 8 "num_1": "2", 9 "num_2": "3" 10 }, 11 { 12 "name": "bbb", 13 "contents_0": "C", 14 "contents_1": "D", 15 "contents_2": "E", 16 "contents_3": "F", 17 "num_0": "4" 18 }, 19 { 20 "name": "ccc", 21 "contents_0": "G", 22 "contents_1": "H", 23 "contents_2": "I", 24 "num_0": "5", 25 "num_1": "6", 26 "num_2": "7", 27 "num_3": "7" 28 } 29]

次のコマンドで実行しました

command

1json2csv -i test.json -o output.csv -s

出力結果は以下のようになりました。

namecontent_0content1num_0num_1num_2content_2content_3num_3
aaaAB123
bbbCD4EF
cccGH567I7

オブジェクトを一つずつ読み取って出力しているため、足りない列はあとから追加しているといった挙動をしていると考えられます。

この出力を、次のようにしたいと考えています。

namecontent_0content1content_2content_3num_0num_1num_2num_3
aaaAB123
bbbCDEF45
cccGH5677

json2csvを用いてこのように列の順番を任意に出力することはできますでしょうか?
また、javascriptを用いた列の並べ替え方などもご教授していただけると助かります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

これではダメですか?

json2csv -i test.json -o output.csv -s -f name,contents_0,contents_1,contents_2,contents_3,num_0,num_1,num_2,num_3

投稿2018/10/11 08:15

編集2018/10/11 08:38
mather

総合スコア6753

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

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

robert

2018/10/11 09:16

回答ありがとうございます。 本文に記述していなくて申し訳ないのですが、今回のJSONファイルはサンプルで、実際はもっと多くのフィールド名があるので引数でフィールド名を指定するやり方だとその都度書かなければいけず、他の方法を模索しておりました、
yoorwm

2018/10/11 09:26

始めのデータがnum_3だけ指定されていた場合は、どのような動作が正しいと思いますか?
robert

2018/10/11 09:38

現在のデータの1つ目がnum_3だけ指定されていて、それをjson2csvで変換した場合の動作ということでしょうか? その場合は1つ目のカラムにnum_3が入り、次に2列目からは2つ目のデータ(nameがbbbのもの)が入っていくと考えられます。 カラムを順に並べると num_3,name,contents_0,contents_1,contents_2,contents_3,num_0,num_1,num_2 といったようになると思います。
mather

2018/10/11 13:17

その都度書かなければならず、というのはわかるのですが、逆にどういう順番で並べたら嬉しいかというのはどうやって決めるんですか?
robert

2018/10/12 01:37

すみません記述不足でした。 JSONファイルはもともと配列を含んでいるものを使っていて、それを展開したものをjson2csvで変換しているといった形です(追記しておきました)。 順番は、もともとのJSONの並び順が望ましいです。 今回の場合はname, content_[0-9], num_[0-9]といった形ですね。
robert

2018/10/12 01:37

もともとのJSONのデータの並び順は決まっております。
mather

2018/10/12 02:11

であれば、それを全て列挙しておけばいいと思います。 値がない場合は空欄になるだけですので。
guest

0

json を配列にしてから、タイトル列毎に並び替えて、csvにすれば良いのでは?

json2array、array2csvで見つかると思います。

投稿2018/10/11 12:36

oikashinoa

総合スコア2826

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

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

robert

2018/10/12 01:40

回答ありがとうございます。 一度この方法で試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問