Como renomear a chave raiz na serialização JSON com Jackson

user2266861:

Estou usando Jackson para serialização JSON de uma lista de objetos.

Aqui está o que eu recebo:

{"ArrayList":[{"id":1,"name":"test name"}]}

Mas eu quero isso:

{"rootname":[{"id":1,"name":"test name"}]} // ie showing the string I want as the root name.

Abaixo está minha abordagem para isso:

Interface:

public interface MyInterface {
    public long getId();
    public String getName();
}

Classe de implementação:

@JsonRootName(value = "rootname")
public class MyImpl implements MyInterface {
    private final long id;
    private String name;

    public MyImpl(final long id,final name) {
        this.id = id;
        this.name = name;
    }

   // getters     
}

Serialização JSon:

public class MySerializer {
    public static String serializeList(final List<MyInterface> lists) {
        //check for null value.Throw Exception
        final ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
        return mapper.writeValueAsString(lists);
    }
}

Teste:

final List<MyInterface> list = new ArrayList<MyImpl>();
MyImpl item = new MyImpl(1L,"test name");
list.add(item);
final String json = MySerializer.serializeList(list);
System.out.println(json);

Aqui está o que eu recebo:

{"ArrayList":[{"id":1,"name":"test name"}]}

Mas eu quero isso:

{"rootname":[{"id":1,"name":"test name"}]} // ie showing the string I want as the root     name.

Tentei todas as soluções sugeridas que encontrei, mas não consegui atingir meu objetivo. Eu olhei para:

Ou eu estou esquecendo de alguma coisa? Estou usando o jackson 1.9.12 para isso. Qualquer ajuda nesse sentido é bem-vinda.

Percepção:

Bem, por padrão, Jackson usa uma das duas anotações ao tentar determinar o nome raiz a ser exibido para valores agrupados - @XmlRootElementou @JsonRootName. Ele espera que essa anotação esteja no tipo que está sendo serializado, caso contrário, usará o nome simples do tipo como o nome raiz.

No seu caso, você está serializando uma lista, e é por isso que o nome raiz é 'ArrayList' (nome simples do tipo que está sendo serializado). Cada elemento da lista pode ser de um tipo anotado com @JsonRootName, mas a lista em si não é .

Quando o valor raiz que você está tentando agrupar é uma coleção, você precisa definir o nome do agrupamento de alguma forma:

Classe de suporte / invólucro

Você pode criar uma classe de wrapper para conter a lista, com uma anotação para definir o nome da propriedade desejada ( você só precisa usar esse método quando não tiver controle direto do ObjectMapperprocesso de transformação / JSON ):

class MyInterfaceList {
    @JsonProperty("rootname")
    private List<MyInterface> list;

    public List<MyInterface> getList() {
        return list;
    }

    public void setList(List<MyInterface> list) {
        this.list = list;
    }
}

final List<MyInterface> lists = new ArrayList<MyInterface>(4);
lists.add(new MyImpl(1L, "test name"));
MyInterfaceList listHolder = new MyInterfaceList();
listHolder.setList(lists);
final String json = mapper.writeValueAsString(listHolder);

Escritor de Objeto

Esta é a opção preferível. Use uma ObjectWriterinstância configurada para gerar o JSON. Em particular, estamos interessados ​​no withRootNamemétodo:

final List<MyInterface> lists = new ArrayList<MyInterface>(4);
lists.add(new MyImpl(1L, "test name"));
final ObjectWriter writer = mapper.writer().withRootName("rootName");
final String json = writer.writeValueAsString(lists);

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Desserialização Jackson JSON com elemento raiz

Como desserializar o objeto raiz com nomes de chave dinâmicos sem sentido? Json.NET

Serialização do formato de data Jackson JSON com base na condição

Como adicionar campos anotados com @JsonIgnore na serialização no Jackson ObectMapper

Como fazer com que o fuso horário padrão se aplique na serialização do Spring Boot Jackson Date

Como adiciono colchetes na serialização JSON?

Ignorar campo específico na serialização com Jackson

Como usar JAXBElement na serialização xml jackson?

Como ignorar dinamicamente uma propriedade na serialização de Jackson

Jackson JSON pula espaços na serialização

Como analisar JSON sem chave raiz

Como remover globalmente o atributo da serialização Jackson JSON?

Maneira simples de converter um objeto com variável de membro String em String única na serialização json (Jackson)

Jackson não consegue desserializar JSON, ele serializa com enableDefaultTyping ()

Jackson JSON - serializa o mesmo objeto com lógica diferente

Imutável / polimórfico POJO <-> serialização JSON com Jackson

Como renomear o elemento raiz xml em SQL

Como renomear o elemento raiz e filho XSLT

Como renomear propriedades JSON na classe filha

Renomear um elemento interno não pode ser feito como renomear elemento raiz, enquanto converte um xml para json usando java

Como extrair o valor da propriedade JSON com base na chave em aplicativos lógicos?

Como enviamos json para o controlador e iteramos com base na chave em java?

Como comparar o valor em JSON com base na chave C ++

Como lidar com “TypeError: objeto 'NoneType' não é subscritível” na chave json?

Como renomear a chave do objeto com uma variável?

Como renomear a chave de array com Arr :: only helper?

Como fazer serializar campos ausentes na string JSON com jackson

Como adicionar uma raiz JSON variável durante o tempo de execução em Jackson

Como inserir a chave ao atravessar da raiz para o nó de destino de uma árvore json?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  3. 3

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  4. 4

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  5. 5

    Gerenciar recurso shake de Windows Aero com barra de título personalizado

  6. 6

    Como obter dados API adequados para o aplicativo angular?

  7. 7

    UITextView não está exibindo texto longo

  8. 8

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  9. 9

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  10. 10

    Usando o plug-in Platform.js do Google

  11. 11

    Como posso modificar esse algoritmo de linha de visada para aceitar raios que passam pelos cantos?

  12. 12

    Dependência circular de diálogo personalizado

  13. 13

    Coloque uma caixa de texto HTML em uma imagem em uma posição fixa para site para desktop e celular

  14. 14

    iOS: como adicionar sombra projetada e sombra de traço no UIView?

  15. 15

    Como usar a caixa de diálogo de seleção de nomes com VBA para enviar e-mail para mais de um destinatário?

  16. 16

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  17. 17

    How to create dynamic navigation menu select from database using Codeigniter?

  18. 18

    Converter valores de linha SQL em colunas

  19. 19

    ChartJS, várias linhas no rótulo do gráfico de barras

  20. 20

    用@StyleableRes注释的getStyledAttributes。禁止警告

  21. 21

    não é possível adicionar dependência para com.google.android.gms.tasks.OnSuccessListener

quentelabel

Arquivo