powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сконвертировать Java/Kotlin класс в YAML без аннотаций
7 сообщений из 7, страница 1 из 1
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39989327
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я попробовал это сделать со SnakeYAML но вместо данных он печатает `!!Portfolio {}`. Код

Код: java
1.
2.
3.
4.
5.
6.
    fun to_yaml(v: Any): String {
      val yaml = Yaml()
      val writer = StringWriter()
      yaml.dump(v, writer)
      return writer.toString()
    }



Как можно сделать чтобы он печатал обьект, любой обьект без нужды в аннотациях. Как JSON для JavaScript.
GSON от Гугла в JSON так конвертирует по умолчанию так как надо, но с YAML что-то не получается.

В идеале чтобы еще и обратно можно было распарсить, указав ему на корневой класс (тоже без аннотаций).

Ну и все внутренние классы тоже. Пример полного кода :


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
    import org.yaml.snakeyaml.Yaml
    import java.io.StringWriter


    fun to_yaml(v: Any): String {
      val yaml = Yaml()
      val writer = StringWriter()
      yaml.dump(v, writer)
      return writer.toString()
    }

    
    fun main() {
    
      val portfolio = Portfolio(
        "id1",
        listOf(
          PortfolioPosition(
            1,
            1.0,
            PortfolioStockContract(
              "MSFT"
            )
          )
        )
      )
      println(to_yaml(portfolio))
    }
        
    class Portfolio(
      val account_id: String,
      val positions:  List<PortfolioPosition>
    )
    
    class PortfolioPosition (
      val position:     Int,
      val average_cost: Double,
      val contract:     PortfolioContract
    )
    
    interface PortfolioContract
    
    enum class ContractType { stock, option }
    
    class PortfolioStockContract (
      val symbol:   String
    ) : PortfolioContract {
      val type = ContractType.stock
    }
...
Рейтинг: 0 / 0
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39989361
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
....отредактировано...сорян не туда
...
Рейтинг: 0 / 0
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39989922
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем Jackson databind не устроил?
...
Рейтинг: 0 / 0
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39990012
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

Непонятно что ты хочешь. Приведи пример желаемого документа на выходе.
...
Рейтинг: 0 / 0
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39990022
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джексон не смотре, гляну, спасибо.

На выходе должна получиться структура (я записал ее как JSON на YAML так-же должно быть)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
{
  account_id: "id1",
  positions: []
    {
      position:     1,
      average_cost: 1.0,
      contract:     {
        symbol: "MSFT",
        type:   "stock"
      }
    }
  ]
}
...
Рейтинг: 0 / 0
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39990034
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok, тогда накидаю по Джексону:

ObjectMapperConfiguration:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
/**
 * Taken from: https://blog.jdriven.com/2016/11/handling-yaml-format-rest-spring-boot/
 */
@Configuration
class ObjectMapperConfiguration {

    //This is our default JSON ObjectMapper. Add @Primary to inject is as default bean.
    @Bean
    @Primary
    ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper()
        //Enable or disable features
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT)
        return objectMapper
    }

    @Bean
    ObjectMapper yamlObjectMapper() {
        //Enable or disable features
        YAMLFactory yamlFactory = new YAMLFactory()
        yamlFactory.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
        yamlFactory.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)
        yamlFactory.disable(YAMLGenerator.Feature.SPLIT_LINES)
        yamlFactory.enable(YAMLGenerator.Feature.INDENT_ARRAYS)
        ObjectMapper yamlObjectMapper = new ObjectMapper(yamlFactory)
        return yamlObjectMapper
    }
}



либо вот так напрямую:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator

    ObjectMapper objectMapper = new ObjectMapper(
            new YAMLFactory()
                    .enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
                    .disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)
                    .disable(YAMLGenerator.Feature.SPLIT_LINES)
                    .enable(YAMLGenerator.Feature.INDENT_ARRAYS)
    )
...
Рейтинг: 0 / 0
Как сконвертировать Java/Kotlin класс в YAML без аннотаций
    #39990610
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, работает!

Итоговый код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
fun to_yaml(v: Any): String {
  val mapper = ObjectMapper(
  YAMLFactory()
    .enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
    .disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)
    .disable(YAMLGenerator.Feature.SPLIT_LINES)
    // .enable(YAMLGenerator.Feature.INDENT_ARRAYS)
  )
  mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
  return mapper.writeValueAsString(v)
}



Печатает

Код: java
1.
2.
3.
4.
5.
6.
7.
account_id: id1
positions:
- position: 1
  average_cost: 1.0
  contract:
    type: stock
    symbol: MSFT
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сконвертировать Java/Kotlin класс в YAML без аннотаций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]