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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JSON

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

873閲覧

クライアントでフォームの値をjsonに変換することが上手く出来ません。

hiepita1

総合スコア37

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JSON

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/05/08 11:20

いつもお世話になっております。現在、フォームで入力された値を、javascript内でjsonに変換しようとしています。
fields_forを利用している、複数行入力する複雑なフォームのため、なかなかスムーズに望んだ形のjsonを作成することができず、苦戦しています。
以下の、①のformの値を②のjson文字列に変換したいです。
いろいろと挑戦してみましたが、上手く行かないのでご教示頂きたいです。

<script> $(function(){ $('form').on('submit',function(){ var data = $('form').serializeArray(); jsondata = (JSON.stringify(data)); }); }); </script> ①jsondataの中身 ↓ [ { "name": "utf8", "value": "✓" }, { "name": "_method", "value": "create" }, { "name": "day", "value": "20180508" }, //mukiからrowcommonvalueまでが1行目のフォームのデータ { "name": "model[][muki]", "value": "1" }, { "name": "model[][rowno]", "value": "1" }, { "name": "model[][code]", "value": "10" }, { "name": "model[][hissuvalue]", "value": "100" }, { "name": "model[][muki]", "value": "0" }, { "name": "model[][rowno]", "value": "1" }, { "name": "model[][code]", "value": "20" }, { "name": "model[][hissuvalue]", "value": "50" }, { "name": "commonmodel[][rowcommonvalue]", "value": "1" },    //mukiからrowcommonvalueまでが2行目のフォームのデータ { "name": "model[][muki]", "value": "1" }, { "name": "model[][rowno]", "value": "2" }, { "name": "model[][code]", "value": "" }, { "name": "model[][hissuvalue]", "value": "" }, { "name": "model[][muki]", "value": "0" }, { "name": "model[][rowno]", "value": "2" }, { "name": "model[][code]", "value": "30" }, { "name": "model[][hissuvalue]", "value": "50" }, { "name": "commonmodel[][rowcommonvalue]", "value": "2" } ]

②以下のようなjsonにしたいです。

  • 要件としては、muki~hissuvalueまでを一つのjsonとして、各行を2つのjsonに分解する。
  • rowcommonvalueはその行に同じ値を振る
  • dayは全てのjsonに同じ値を振る
  • hissuvalueが空欄の場合、その部分のjsonは作成しない
[ { "muki": "1", "rowno": "1", "code": "10", "hissuvalue": "100", "day": "20180508", "rowcommonvalue": "1", }, { "muki": "0", "rowno": "1", "code": "20", "hissuvalue": "50", "day": "20180508", "rowcommonvalue": "1", }, { "muki": "0", "rowno": "2", "code": "30", "hissuvalue": "50", "day": "20180508", "rowcommonvalue": "2", } ]

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

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

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

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

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

kei344

2018/05/08 11:35

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
hiepita1

2018/05/18 00:45

仰るとおりでした。各フォームのinput要素を絞り込んでぐるぐる回して処理する所までは出来ましたが、共通要素を既存のjsonにいれ込む方法がわかりませんでした。 今回はyambejpさんが回答してくださった方法で実装したいと思います。次回以降は細かく質問文に記載致します。ありがとうございました。
guest

回答1

0

ベストアンサー

なんかやりようがありそうな気はしますが
とりあえず地道に冗長に・・・

javascript

1var a=[ 2 {"name": "utf8","value": "?"}, 3 {"name": "_method","value": "create"}, 4 {"name": "day","value": "20180508"}, 5 {"name": "model[][muki]","value": "1"}, 6 {"name": "model[][rowno]","value": "1"}, 7 {"name": "model[][code]","value": "10"}, 8 {"name": "model[][hissuvalue]","value": "100"}, 9 {"name": "model[][muki]","value": "0"}, 10 {"name": "model[][rowno]","value": "1"}, 11 {"name": "model[][code]","value": "20"}, 12 {"name": "model[][hissuvalue]","value": "50"}, 13 {"name": "commonmodel[][rowcommonvalue]","value": "1"}, 14 {"name": "model[][muki]","value": "1"}, 15 {"name": "model[][rowno]","value": "2"}, 16 {"name": "model[][code]","value": ""}, 17 {"name": "model[][hissuvalue]","value": ""}, 18 {"name": "model[][muki]","value": "0"}, 19 {"name": "model[][rowno]","value": "2"}, 20 {"name": "model[][code]","value": "30"}, 21 {"name": "model[][hissuvalue]","value": "50"}, 22 {"name": "commonmodel[][rowcommonvalue]","value": "2"} 23]; 24var b=[]; 25var c=-1; 26var d=a.filter(function(x){ 27 return x["name"]=="day"; 28}).map(function(x){ 29 return x["value"]; 30})[0]; 31a.forEach(function(x){ 32 var n=x["name"]; 33 var reg=new RegExp("^model\[\]\[(.+?)\]$"); 34 if(r=n.match(reg)){ 35 if(b.length==0 || typeof b[c][r[1]]!=="undefined"){ 36 c++; 37 b[c]={}; 38 b[c]["day"]=d; 39 } 40 b[c][r[1]]=x["value"]; 41 } 42 var reg=new RegExp("^commonmodel\[\]\[(.+?)\]$"); 43 if(r=n.match(reg)){ 44 b.forEach(function(y){ 45 if(typeof y[r[1]]=="undefined") y[r[1]]=x["value"]; 46 }); 47 48 } 49}); 50console.log(b); 51

投稿2018/05/08 12:19

yambejp

総合スコア114968

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

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

hiepita1

2018/05/18 00:46

回答ありがとうございます! javascriptの知識が薄いもので、こういった実装もどのようにコードに落とし込んでいいのかわかりませんでした。 大変勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問