Преобразование вложенного списка в Gson.tojson - PullRequest
0 голосов
/ 15 мая 2018

Я использую Scala, но это относится и к Java - похоже, у Gson возникают проблемы с преобразованием List, вложенного в класс case / в другой объект:

case class Candy(name:String, price:Double)
case class PersonCandy(name:String, age:Int, candyList:List[Candy])

val candies = List(Candy("M&M's", 1.99), Candy("Snickers", 1.59), Candy("Butterfinger", 2.33))
val personC = PersonCandy("Mark", 19, candies)

val pollAsJson = new Gson().toJson(personC)

REPL показывает результирующее pollAsJson следующим образом:

pollAsJson: String = {"name":"Mark","age":19,"candyList":{}}

Мой обходной путь может заключаться в преобразовании вложенного candyList, преобразовании personC, а затем, поскольку оба являются просто строками, вручную взломайте их вместе, но это не идеально. Чтение блогов, их использование и т. Д. Кажется, что Gson может извлекать и преобразовывать вложенные внутренние классы очень хорошо, но когда коллекция является вложенным классом, у нее, похоже, возникают проблемы. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы можете использовать модуль lift-json для рендеринга строк json из case-классов.Это хорошая простая в использовании библиотека с действительно хорошим DSL для создания строк JSON без использования case-классов.Вы можете найти больше об этом в Lift-Json Github page

0 голосов
/ 16 мая 2018

Проблема связана не с классами дел или вложением, а с типами коллекций Scala, которые не поддерживаются в Gson должным образом.

Чтобы доказать это, давайте изменим PersonCandy на

case class PersonCandy(name:String, age:Int, candyList: java.util.List[Candy])

И преобразовать candies в список Java:

import scala.collection.JavaConverters._
val candies = List(/* same items */).asJava

И JSON в порядке:

{"name":"Mark","age":19,"candyList":[{"name":"M\u0026M\u0027s","price":1.99},{"name":"Snickers","price":1.59},{"name":"Butterfinger","price":2.33}]}

И если вы попытаетесь создать JSON для исходного списка candies, он выдаст:

{"head":{"name":"M\u0026M\u0027s","price":1.99},"tl":{}}

Что отражает структуру списка head :: tail.

Gson - это библиотека, в основном используемая с кодом Java.

Для Scala существует множество вариантов. Я бы предложил попробовать некоторые из ответов на этот вопрос .

...