Eu gostaria de analisar dados do JSON, que é do tipo String
. Estou usando o Google Gson .
Eu tenho:
jsonLine = "
{
"data": {
"translations": [
{
"translatedText": "Hello world"
}
]
}
}
";
e minha turma é:
public class JsonParsing{
public void parse(String jsonLine) {
// there I would like to get String "Hello world"
}
}
Respostas:
Este é um código simples, evitei todas as verificações, mas essa é a ideia principal.
Para tornar o uso mais genérico - você encontrará que os javadocs do Gson são bem claros e úteis.
fonte
No meu primeiro aplicativo gson, evitei usar classes adicionais para capturar valores, principalmente porque uso o json para questões de configuração
apesar da falta de informação (mesmo na página gson), foi o que encontrei e usei:
Começando de
Cada vez que o gson vê um {}, ele cria um mapa (na verdade, um gson StringMap)
Cada vez que o gson vê um '', ele cria uma String
Cada vez que o gson vê um número, ele cria um Double
Cada vez que o gson vê um [], ele cria um ArrayList
Você pode usar esses fatos (combinados) para sua vantagem
Finalmente, este é o código que faz a coisa
fonte
A coisa mais simples geralmente é criar a hierarquia de objetos correspondente, da seguinte forma:
e depois vincule usando o GSON, percorra a hierarquia de objetos por meio de campos. Adicionar getters e setters não faz sentido para contêineres de dados básicos.
Então, algo como:
fonte
Você pode criar classes java correspondentes para os objetos json. O número inteiro, os valores da sequência podem ser mapeados como estão. Json pode ser analisado assim -
Aqui está um exemplo: http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html
fonte
Você pode usar uma classe separada para representar o objeto JSON e usar
@SerializedName
anotações para especificar o nome do campo a ser capturado para cada membro de dados:Então você pode fazer a análise no seu método parse () usando um
Gson
objeto:Com essa abordagem, é possível reutilizar a
Response
classe para adicionar outros campos adicionais para selecionar outros membros de dados que você deseja extrair do JSON - caso deseje fazer alterações para obter resultados para, por exemplo, várias traduções em uma chamada, ou para obter uma sequência adicional para o idioma de origem detectado.fonte
Uma maneira seria criar um JsonObject e iterar através dos parâmetros. Por exemplo
Então você pode extrair valores de bean como:
Espero que isto ajude.
fonte
Usando o Gson para resolver
eu criaria uma classe para parâmetro individual na string json. Como alternativa, você pode criar uma classe principal chamada "Dados" e, em seguida, criar classes internas da mesma forma. Criei classes separadas para maior clareza.
As aulas são as seguintes.
Na classe JsonParsing, o método "parse" chamamos
gson.fromJson(jsonLine, Data.class)
que converterá a String em objetos java usando Reflection.Uma vez que tenhamos acesso ao objeto "Dados", podemos acessar cada parâmetro individualmente.
Não tive a chance de testar esse código, pois estou longe da minha máquina de desenvolvimento. Mas isso deve ajudar.
Alguns bons exemplos e artigos.
http://albertattard.blogspot.com/2009/06/practical-example-of-gson.html
http://sites.google.com/site/gson/gson-user-guide
Código
fonte
private String translatedText
sem violar o controle de acesso; portanto, não há comofromJSON
defini-lo nas JVMs que não optaram pela reflexão atropelando todo o controle de acesso.Um exemplo simples para analisar um JSON como este
fonte
Em primeiro lugar, gerar Getter And Setter usando o site de análise abaixo
http://www.jsonschema2pojo.org/
Agora use o Gson
Agora use object para obter valores como data, translationText
fonte
Você pode usar uma consulta JsonPath para extrair o valor. E com o JsonSurfer, que é apoiado pelo Gson, seu problema pode ser resolvido com apenas duas linhas de código!
fonte
Código de uma linha:
fonte