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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

6834閲覧

Java(Scala)でyamlをMapに読み込むライブラリを探しています。

Skuwa229

総合スコア13

Scala

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/06/25 14:37

###前提・実現したいこと
JavaでYamlをMapに読み込むライブラリを探しています。(Scalaでも構いません。)
有名だったのでSnakeYamlを利用してみたのですが、"|"の読み込みには対応していないようで、そこで結果がおかしくなってしまいます。
その他のJavaライブラリで、シーケンスと改行文字列を扱えるライブラリはないでしょうか。
理想としては、LinkedHashMap<String, Object>に落とし込めると嬉しいです。
###yamlのフォーマット例

param1: パラメーター sequence: - seq: シーケンス1 - seq: シーケンス2 sequence2: text: | あいうえお かきくけこ さしすせそ text: | たちつてと なにぬねの はひふへほ

###SnakeYamlで上のYamlを読み込んだ場合
コード

for (String key : values.keySet()) { System.out.println(key + " : " + m.get(key)); }

実行結果

param1 : パラメーター sequence : {sequence2={ text=|}} sequence2 : null

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

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

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

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

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

guest

回答2

0

入力データと java コードを見なおしてみました。
b.yml

yaml

1param1: パラメーター 2sequence: 3 - seq: シーケンス1 4 - seq: シーケンス2 5sequence2: 6 textA: | 7 あいうえお 8 かきくけこ 9 さしすせそ 10 textB: | 11 たちつてと 12 なにぬねの 13 はひふへほ

java

1 Yaml yaml = new Yaml(); 2 Map<String, Map<String, String>> map = (Map<String, Map<String, String>>) yaml 3 .load(new FileInputStream(new File("b.yml"))); 4 // System.out.println(map); 5 6 for (String key : map.keySet()) { 7 System.out.println(key + " : " + map.get(key)); 8 }

実行結果

param1 : パラメーター sequence : [{seq=シーケンス1}, {seq=シーケンス2}] sequence2 : {textA=あいうえお かきくけこ さしすせそ , textB=たちつてと なにぬねの はひふへほ }

イメージ説明

投稿2016/06/25 23:14

katoy

総合スコア22324

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

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

Skuwa229

2016/06/27 08:01

単純なミスでした!ありがとうございました。
guest

0

ベストアンサー

面白そうなのでやってみました。Webで見つけたサンプルほとんどそのままです。

Java

1package foo.bar; 2 3import java.util.Map; 4import java.util.Map.Entry; 5 6import org.yaml.snakeyaml.Yaml; 7 8public class HelloYaml { 9 10 public static void main(String[] args) { 11 12 StringBuilder sb = new StringBuilder(); 13 sb.append("param1: パラメーター" + "\n"); 14 sb.append("sequence:" + "\n"); 15 sb.append(" - seq: シーケンス1" + "\n"); 16 sb.append(" - seq: シーケンス2" + "\n"); 17 sb.append("sequence2:" + "\n"); 18 sb.append(" text: |" + "\n"); 19 sb.append(" あいうえお" + "\n"); 20 sb.append(" かきくけこ" + "\n"); 21 sb.append(" さしすせそ" + "\n"); 22 sb.append(" text: |" + "\n"); 23 sb.append(" たちつてと" + "\n"); 24 sb.append(" なにぬねの" + "\n"); 25 sb.append(" はひふへほ" + "\n"); 26 27 Yaml yaml = new Yaml(); 28 @SuppressWarnings("unchecked") 29 Map<String, Object> yamlMap = (Map<String, Object>) yaml.load(sb.toString()); 30 31 for(Entry<String, Object> e : yamlMap.entrySet()) { 32 System.out.println(e.getKey() + " : " + e.getValue()); 33 } 34 } 35 36}

実行結果

param1 : パラメーター sequence : [{seq=シーケンス1}, {seq=シーケンス2}] sequence2 : {text=たちつてと なにぬねの はひふへほ }

できてるように見えるのですが、こういうことじゃなくてですか?

投稿2016/06/25 15:17

Mr_Roboto

総合スコア2208

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

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

Skuwa229

2016/06/27 08:01

単純なミスでした!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問