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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

JSON

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

Q&A

解決済

1回答

1283閲覧

Scalaでソース内に同じ記述を繰り返したくない

teratake27

総合スコア8

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

JSON

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

0グッド

0クリップ

投稿2019/11/28 06:46

編集2019/11/28 08:14

前提・実現したいこと

######Jsonファイルにfield, valueというペアの記述があるとデータを取ってこれるようなシステムを使っております。
######言語はScalaでJsonファイルを出力する処理を書いているのですが、必要なデータの分だけfield, valueという記述を繰り返し書いてしまっています。
######Jsonファイルを受け取るシステム側の値の受け取り方は変えずに、Scalaのソース上だけ繰り返しの記述をなくしたいです。

######Mapを使ってループ処理を書くといいというヒントは得たのですが、具体的な記述方法がわかりません。

######それ以外にも簡単な方法等あればご教授いただきたいです。

該当のソースコード

Scala

1 val table1 = ("{" + 2 "\"field\":\"要素1\", " + 3 "\"value\":\"%s\"}, " + 4 "{\"field\":\"要素2\", " + 5 "\"value\":\"%s\"}, " + 6 "{\"field\":\"要素3\", " + 7 "\"value\":\"%s\"}, " + 8 "{\"field\":\"要素4\", " + 9 "\"value\":\"%s\"}, " + 10 "{\"field\":\"要素5\", " + 11 "\"value\":\"%s\"}, " + 12 "{\"field\":\"要素6\", " + 13 "\"value\":\"%s\"}, " + 14 "{\"field\":\"要素7\", " + 15 "\"value\":\"%s\"}, " + 16 "{\"field\":\"要素8\", " + 17 "\"value\":\"%s\"}, " + 18 "{\"field\":\"要素9\", " + 19 "\"value\":\"%s\"}, " + 20 "{\"field\":\"要素10\", " + 21 "\"value\":\"%s\"}, " + 22 "{\"field\":\"要素11\", " + 23 "\"value\":\"%s\"}, " + 24 "{\"field\":\"要素12\", " + 25 "\"value\":\"%s\"}, " + 26 "{\"field\":\"要素13\", " + 27 "\"value\":\"%s\"}, " + 28 "{\"field\":\"要素14\", " + 29 "\"value\":\"%s\" " + 30 "}\r\n" 31 ).format(要素1, 要素2,要素3,要素4,要素5,要素6,要素7,要素8,要素9,要素10,要素11,要素12,要素13,要素14)

JSON

1"Table1": 2[ 3{"field":"要素1", "value":"xxxxxx"}, {"field":"要素2", "value":"xxxxxx"}, {"field":"要素3", "value":"xxxxxx"}, {"field":"要素4", "value":"xxxxxx"}, {"field":"要素5", "value":"xxxxxx"}, {"field":"要素6", "value":"xxxxxx"}, {"field":"要素7", "value":"xxxxxx"}, {"field":"要素8", "value":"xxxxxx"}, {"field":"要素9", "value":"xxxxxx"}, {"field":"要素10", "value":"xxxxxx"}, {"field":"要素11", "value":"xxxxxx"}, {"field":"要素12", "value":"xxxxxx"}, {"field":"要素13", "value":"xxxxxx"}, {"field":"要素14", "value":"xxxxxx" } 4 5]

試したこと

####Map処理のkeyに"field", valueに"value"としてループで文字列を組み立てるというのがヒントらしいのですが、アルゴリズムや基本的なメソッドが苦手なために具体的な記述ができていません。
####以下の要領で何かできないか試しているのですが、今だ解決に至りません。

Scala

1 val m = Map(1 -> "Apple", 2 -> "Banana", 3 -> "Chocolate") 2 3 for((key, value) <- m) 4 println("field:%s, value:%s".format(key, value)) 5 6//field:1, value:Apple 7//field:2, value:Banana 8//field:3, value:Chocolate

補足情報

####ソース中の"%s"の部分で最下の.formatの引数を取っていますString型で取得しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

circeというライブラリを使ってこう書くのはどうでしょうか?

scala

1 2 case class Hoge(field: String, value: String) 3 import io.circe.generic.auto._ 4 import io.circe.syntax._ 5 println(Seq(Hoge("要素1", "xxxxx"), Hoge("要素2", "yyyyy")).asJson)

このコードを動かすと下のような結果になります

json

1[ 2 { 3 "field" : "要素1", 4 "value" : "xxxxx" 5 }, 6 { 7 "field" : "要素2", 8 "value" : "yyyyy" 9 } 10]

こちらでも確認できます。

投稿2019/12/04 08:50

rysh

総合スコア874

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

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

teratake27

2019/12/04 10:30

circeというライブラリは初めて拝見したのですが、確かにこの通りに実現できました! ご回答いただきありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問