Eu tenho o seguinte texto JSON. Como posso analisá-lo para obter os valores de pageName
, pagePic
, post_id
, etc.?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Respostas:
A biblioteca org.json é fácil de usar. Exemplo de código abaixo:
Você pode encontrar mais exemplos em: Parse JSON in Java
Frasco para download: http://mvnrepository.com/artifact/org.json/json
fonte
org.json
outras bibliotecas para a análise JSON simples, sem sequer olhar. É a biblioteca de referência que Douglas Crockford (o descobridor do JSON) criou.Por uma questão de exemplo, vamos supor que você tenha uma classe
Person
com apenas aname
.Google GSON ( Maven )
Meu favorito pessoal quanto à grande serialização / desserialização de objetos JSON.
Atualizar
Se você deseja obter um único atributo, também pode fazê-lo facilmente com a biblioteca do Google:
Org.JSON ( Maven )
Se você não precisa de desserialização de objetos, mas simplesmente obtém um atributo, tente o org.json ( ou veja o exemplo do GSON acima! )
Jackson ( Maven )
fonte
JsonNode
s, o GSON tem algo semelhante). Pode ser bom mostrar trechos, pois é semelhante à única maneira que o org.json oferece.Se alguém quiser criar um objeto Java a partir do JSON e vice-versa, use os frascos de terceiros GSON ou JACKSON etc.
Mas se alguém quiser apenas analisar uma string JSON e obter alguns valores (ou criar uma string JSON do zero para enviar por fio), use o jar JaveEE que contém JsonReader, JsonArray, JsonObject etc. Você pode fazer o download da implementação dessa especificações como javax.json. Com esses dois jarros, sou capaz de analisar o json e usar os valores.
Na verdade, essas APIs seguem o modelo de análise DOM / SAX de XML.
fonte
analisador quick-json é muito direto, flexível, muito rápido e personalizável. Tente
Recursos:
Pode ser usado assim:
fonte
Você poderia usar o Google Gson .
Usando esta biblioteca, você só precisa criar um modelo com a mesma estrutura JSON. Em seguida, o modelo é preenchido automaticamente. Você precisa chamar suas variáveis como chaves JSON ou usar
@SerializedName
se desejar usar nomes diferentes.JSON
Do seu exemplo:
Modelo
Análise
Agora você pode analisar usando a biblioteca Gson:
Importação Gradle
Lembre-se de importar a biblioteca no arquivo Gradle do aplicativo
Geração automática de modelo
Você pode gerar o modelo a partir do JSON automaticamente usando ferramentas online como esta .
fonte
Quase todas as respostas fornecidas requerem uma desserialização completa do JSON em um objeto Java antes de acessar o valor na propriedade de interesse. Outra alternativa, que não segue essa rota, é usar o JsonPATH, que é como o XPath for JSON e permite o deslocamento de objetos JSON.
É uma especificação e o pessoal da JayWay criou uma implementação Java para a especificação, que você pode encontrar aqui: https://github.com/jayway/JsonPath
Então, basicamente, para usá-lo, adicione-o ao seu projeto, por exemplo:
e usar:
etc ...
Verifique a página de especificação do JsonPath para obter mais informações sobre as outras maneiras de atravessar o JSON.
fonte
A - Explicação
É possível usar as bibliotecas Jackson , para vincular a Cadeia JSON às instâncias POJO ( Plain Old Java Object ). POJO é simplesmente uma classe com apenas campos privados e métodos públicos de obtenção / instalação. Jackson vai percorrer os métodos (usando reflexão ) e mapeia o objeto JSON para a instância do POJO, à medida que os nomes de campo da classe se ajustam aos nomes de campo do objeto JSON.
No seu objeto JSON, que na verdade é um objeto composto , o objeto principal consiste em dois subobjetos. Portanto, nossas classes POJO devem ter a mesma hierarquia. Vou chamar o objeto JSON inteiro como página objeto de . O objeto de página consiste em um objeto PageInfo e uma matriz de objetos Post .
Portanto, temos que criar três classes POJO diferentes;
O único pacote que usei é o Jackson ObjectMapper, o que fazemos é vincular dados;
As dependências necessárias, os arquivos jar estão listados abaixo;
Aqui está o código necessário;
B - Classe principal do POJO: página
C - Classe POJO filho: PageInfo
D - Classe POJO Criança: Post
E - Arquivo JSON de amostra: sampleJSONFile.json
Acabei de copiar seu exemplo JSON para esse arquivo e colocá-lo na pasta do projeto.
F - Código Demo
G - Saída de demonstração
fonte
Use minimal-json que é muito rápido e fácil de usar. Você pode analisar a partir de String obj e Stream.
Dados de amostra:
Análise:
Criando JSON:
Maven:
fonte
Acredito que a melhor prática seja passar pela API Java JSON oficial, que ainda está em andamento.
fonte
Como ninguém o mencionou ainda, aqui está o começo de uma solução usando Nashorn (parte do tempo de execução JavaScript do Java 8, mas descontinuada no Java 11).
Solução
Comparação de desempenho
Eu escrevi conteúdo JSON contendo três matrizes, respectivamente, 20, 20 e 100 elementos. Eu só quero obter os 100 elementos da terceira matriz. Eu uso a seguinte função JavaScript para analisar e obter minhas entradas.
A execução da chamada um milhão de vezes usando Nashorn leva de 7,5 a 7,8 segundos
org.json leva 20 ~ 21 segundos
Jackson leva 6,5 ~ 7 segundos
Nesse caso, Jackson tem um desempenho melhor que Nashorn, que tem um desempenho muito melhor que o org.json. A API Nashorn é mais difícil de usar que a do org.json ou do Jackson. Dependendo dos seus requisitos, Jackson e Nashorn podem ser soluções viáveis.
fonte
"
"? Não polegadas? São segundos? Minutos?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
O exemplo abaixo mostra como ler o texto na pergunta, representado como a variável "jsonText". Esta solução usa a API Java EE7 javax.json (mencionada em algumas das outras respostas). A razão pela qual a adicionei como resposta separada é que o código a seguir mostra como realmente acessar alguns dos valores mostrados na pergunta. Uma implementação da API javax.json seria necessária para executar esse código. O pacote completo para cada uma das classes exigidas foi incluído, pois eu não queria declarar instruções "import".
Agora, antes que alguém rejeite essa resposta porque ela não usa GSON, org.json, Jackson ou qualquer outra estrutura de terceiros disponível, é um exemplo de "código necessário" por pergunta para analisar o texto fornecido. Estou ciente de que a adesão ao padrão atual JSR 353 não estava sendo considerada para o JDK 9 e, como tal, as especificações do JSR 353 devem ser tratadas da mesma forma que qualquer outra implementação de manipulação de JSON de terceiros.
fonte
Isso me impressionou com o quão fácil foi. Você pode simplesmente passar
String
seu JSON em espera para o construtor de um JSONObject no pacote org.json padrão.Feito. Larga o microfone . Isso funciona
JSONObjects
também. Depois disso, você pode simplesmente examinar sua hierarquiaObjects
usando osget()
métodos em seus objetos.fonte
JSONArray
tipo não faz parte da API J2SE JDK e você não diz qual API ou biblioteca de terceiros fornece esse tipo.Existem muitas bibliotecas JSON disponíveis em Java.
Os mais notórios são: Jackson, GSON, Genson, FastJson e org.json.
Normalmente, há três coisas que devemos considerar para escolher qualquer biblioteca:
Especificamente para bibliotecas JSON (e quaisquer bibliotecas de serialização / desserialização), a ligação de dados também é geralmente interessante, pois elimina a necessidade de escrever o código da caldeira para compactar / descompactar os dados.
Para 1, consulte esta referência: https://github.com/fabienrenaud/java-json-benchmark que fiz usando JMH que compara (jackson, gson, genson, fastjson, org.json, jsonp) o desempenho de serializadores e desserializadores usando stream e APIs de ligação de dados. Para o 2, você pode encontrar vários exemplos na Internet. A referência acima também pode ser usada como fonte de exemplos ...
Análise rápida do benchmark: Jackson executa de 5 a 6 vezes melhor que o org.json e mais do que duas vezes melhor que o GSON.
Para seu exemplo específico, o código a seguir decodifica seu json com jackson:
Deixe-me saber se você tiver alguma dúvida.
fonte
Além de outras respostas, recomendo este serviço on-line de código- fonte jsonschema2pojo.org para gerar rapidamente classes Java a partir do esquema json ou json para GSON, Jackson 1.x ou Jackson 2.x. Por exemplo, se você tiver:
O jsonschema2pojo.org para o GSON gerou:
fonte
Se você tiver alguma classe Java (diga Mensagem) representando a sequência JSON (jsonString), poderá usar a biblioteca Jackson JSON com:
e do objeto de mensagem, você pode buscar qualquer um de seus atributos.
fonte
O Gson é fácil de aprender e implementar. O que precisamos saber é seguir dois métodos
toJson () - converte objeto Java para o formato JSON
fromJson () - converte JSON em objeto Java
`
`
fonte
Existem muitas bibliotecas de código aberto presentes para analisar o conteúdo JSON em um objeto ou apenas para ler valores JSON. Seu requisito é apenas ler valores e analisá-los em objetos personalizados. Portanto, a biblioteca org.json é suficiente no seu caso.
Use a biblioteca org.json para analisá-la e criar JsonObject:
Agora, use este objeto para obter seus valores:
Você pode ver um exemplo completo aqui:
Como analisar JSON em Java
fonte
Faça algo como isto:
fonte
Você pode usar a Biblioteca Gson para analisar a sequência JSON.
Você também pode percorrer a matriz "posts" da seguinte maneira:
fonte
fonte
Leia a seguinte postagem no blog, JSON in Java .
Este post é um pouco antigo, mas ainda quero responder a sua pergunta.
Etapa 1: Crie uma classe POJO dos seus dados.
Etapa 2: agora crie um objeto usando JSON.
Para referência adicional, você pode consultar o seguinte link .
fonte
As principais respostas desta página usam exemplos muito simples, como objetos com uma propriedade (por exemplo, {name: value}). Eu acho que esse exemplo ainda simples, mas da vida real, pode ajudar alguém.
Portanto, este é o JSON retornado pela API do Google Tradutor:
Quero recuperar o valor do atributo "translateText", por exemplo, "Arbeit" usando o Gson do Google.
Duas abordagens possíveis:
Recupere apenas um atributo necessário
Criar objeto Java a partir de JSON
...
fonte
Primeiro você precisa selecionar uma biblioteca de implementação para fazer isso.
A API Java para processamento JSON (JSR 353) fornece APIs portáteis para analisar, gerar, transformar e consultar JSON usando modelo de objeto e APIs de streaming.
A implementação de referência está aqui: https://jsonp.java.net/
Aqui você pode encontrar uma lista de implementações do JSR 353:
O que é a API que implementa JSR-353 (JSON)
E para ajudá-lo a decidir ... Encontrei este artigo também:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Se você for para Jackson, aqui está um bom artigo sobre a conversão entre JSON para / de Java usando Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- jackson /
Espero que ajude!
fonte
Você pode usar o Jayway JsonPath . Abaixo está um link do GitHub com código fonte, detalhes do pom e boa documentação.
https://github.com/jayway/JsonPath
Por favor, siga os passos abaixo.
Etapa 1 : adicione a dependência do caminho JSON jayway no caminho da sua classe usando o Maven ou faça o download do arquivo JAR e adicione-o manualmente.
Etapa 2 : salve sua entrada JSON como um arquivo para este exemplo. No meu caso, salvei seu JSON como sampleJson.txt. Observe que você perdeu uma vírgula entre pageInfo e postagens.
Etapa 3 : leia o conteúdo JSON do arquivo acima usando bufferedReader e salve-o como String.
Etapa 4 : Analise sua string JSON usando o analisador jayway JSON.
Etapa 5 : Leia os detalhes como abaixo.
A saída será :
fonte
Eu tenho JSON assim:
Classe Java
Código para converter esse JSON em uma classe Java.
Maven
fonte
Pode-se usar a anotação Apache @Model para criar classes de modelo Java que representam a estrutura dos arquivos JSON e usá-las para acessar vários elementos na árvore JSON . Ao contrário de outras soluções, esta funciona completamente sem reflexão e, portanto, é adequada para ambientes em que a reflexão é impossível ou ocorre com sobrecarga significativa.
Há um exemplo de projeto do Maven mostrando o uso. Antes de tudo, define a estrutura:
e, em seguida, usa as classes RepositoryInfo e Owner geradas para analisar o fluxo de entrada fornecido e coletar determinadas informações ao fazer isso:
É isso! Além disso, aqui está uma essência ao vivo que mostra um exemplo semelhante, juntamente com a comunicação de rede assíncrona.
fonte
jsoniter
(jsoniterator) é uma biblioteca json relativamente nova e simples, projetada para ser simples e rápida. Tudo o que você precisa fazer para desserializar dados json éonde
jsonData
é uma sequência de dados json.Confira o site oficial para mais informações.
fonte
Podemos usar a classe JSONObject para converter uma string JSON em um objeto JSON e iterar sobre o objeto JSON. Use o seguinte código.
fonte
Você pode usar a biblioteca de análise de fluxo do DSM para analisar documentos json e XML complexos. O DSM analisa dados apenas uma vez e não carrega todos os dados na memória.
Digamos que temos Página classe para desserializar dados json.
Classe da página
Crie um arquivo de mapeamento yaml.
Use o DSM para extrair campos.
variável de página serializada para json:
O DSM é muito bom para json e xml complexos.
fonte
Você pode usar
JsonNode
para uma representação em árvore estruturada da sua cadeia JSON. Faz parte da biblioteca sólida de Jackson , que é onipresente.fonte