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

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

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

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

10527閲覧

Java Listをjsonに変換したい

encho

総合スコア182

JSON

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/04/02 00:07

編集2020/04/02 01:16

#JavaのListをjsonに変換したいです
javaのListをjsonに変換しようと思い以下のコードを実行しました。

java

1import org.springframework.beans.factory.annotation.Autowired; 2import org.springframework.stereotype.Service; 3 4import com.fasterxml.jackson.core.JsonProcessingException; 5import com.fasterxml.jackson.databind.ObjectMapper; 6import com.fasterxml.jackson.databind.SerializationFeature; 7 8import java.util.List; 9 10import domain.model.Matching; 11import domain.repository.MatchingRepository; 12 13@Service 14public class MatchingService { 15 16 @Autowired 17 MatchingRepository matchingRepository; 18 19 public String matchingApplicationCheckLogic(int userId) { 20 //ログインユーザーの未承認申請をチェック 21 List<Matching> matchingList = 22 matchingRepository.findByUser1_userIdAndContactAvailabilityIsNull(userId); 23 24 // JSON変換用のクラス 25 ObjectMapper mapper = new ObjectMapper(); 26 mapper.enable(SerializationFeature.INDENT_OUTPUT); 27 28 String jsonMatchingList = ""; 29 try { 30 //JSON文字列に変換 31 jsonMatchingList = mapper.writeValueAsString(matchingList); 32 System.out.println(jsonMatchingList); 33 } catch (JsonProcessingException e) { 34 e.printStackTrace(); 35 } 36 return jsonMatchingList; 37 } 38}

上記のようにListを変換しようとしたところ
StackOverflowErrorが表示され以下のような表示が連続で表示されました。
この表示が何度もあることによりStackOverflowErrorが出ていることは理解できるのですが、
なぜList→jsonの変換がうまくいっていないのか、下記の表示がなぜ出るのかがわかりません。
アドバイスをいただけると幸いです。
よろしくお願いいたします。

java 12.0.1
springBoot 2.0

at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166) at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145) at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)

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

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

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

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

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

guest

回答2

0

自己解決

必要な情報をMapに詰めてJsonに変換することで解決

投稿2020/04/02 02:59

encho

総合スコア182

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

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

0

Matching型の実装が提示されていないので、あくまでも想像ですが、Aのマッチング相手がBで、Bのマッチング相手がAで、という風になにかの参照が循環しているのではないでしょうか?グルグルまわってStackOverflowError。

投稿2020/04/02 01:16

shiketa

総合スコア3971

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

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

encho

2020/04/02 01:19

ご回答ありがとうございます。 おっしゃる通りAのマッチング相手がBで、Bのマッチング相手がAという形になっています。 この場合どのように対処するのが適切なのでしょうか?
shiketa

2020/04/02 01:28

いやいや。それをわたしに訊かれても困ります。 JSON形式にしたい、ということなので、最終的にどういう形になってほしいのかは決まっているのですよね?その形に沿ったオブジェクトなりList/Mapなりを組み立ててObjectMapperに渡せば望む形にしてくれる、と思います。 Matching型のデシリアライザを定義する方法もあるのかもしれませんが、件の循環をうまく解消できるかどうかはわかりません。
encho

2020/04/02 01:51

わかりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問