E se você tiver um <test attrib="moretest" content="foo">bar</test>?
wchargin
1
NOTA: O XML.toJSONObject () do org.json também converte corretamente as listas xml em matrizes json (ao contrário do XmlMapper de jackson, que por padrão é engolido silenciosamente).
Agoston Horvath
58
Para converter o arquivo XML em JSON, inclua a seguinte dependência
use a versão do json mencionada no post se você estiver no java 7, pois a versão mais recente gera erros estranhos.
urug
Se você tiver um arquivo dtd válido para o snippet xml, poderá converter facilmente xml em json e json em xml usando o jar de link de eclipse de código aberto. Projeto JAVA amostra detalhada pode ser encontrada aqui: cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
Piyush Chordia
Eu tive que copiar o pacote JSON inteiro para o meu projeto e renomeei o pacote. Adicionar ao gradle avisa sobre o pacote duplicado do Android durante a compilação.
Codelearner
28
O único problema com JSON em Java é que, se seu XML tiver um único filho, mas for uma matriz, ele será convertido em um objeto, em vez de uma matriz. Isso pode causar problemas se você sempre converter dinamicamente de XML para JSON, onde se seu exemplo de XML tiver apenas um elemento, você retornará um objeto, mas se tiver mais de 2, retornará uma matriz, o que pode causar problemas de análise para as pessoas que usam o método JSON.
A classe XML2JSON da Infoscoop tem uma maneira de marcar elementos que são matrizes antes de fazer a conversão, para que as matrizes possam ser mapeadas corretamente, mesmo se houver apenas um filho no XML.
Aqui está um exemplo de uso (em uma linguagem um pouco diferente, mas você também pode ver como as matrizes são usadas no método nodelist2json () do link XML2JSON).
estamos usando uma biblioteca "xml-to-json" em python e esse é um problema semântico. O que fazemos para resolver esse problema de "matriz ou objeto" é escrever um método "tryConvertToArray ()", que retorna uma matriz com o único objeto. Assim, você pode sempre confiar em seu valor a ser um array
kommradHomer
Não está claro para mim como isso resolve o problema. Você transforma tudo em uma matriz em vez de um objeto? Por exemplo, se eu tiver a XML <results><result><value>1</value></result></results>, seria gerar { "results" : { "result" : { "value" : "1" } } } ou { "results" : [ { "result" : { "value" : "1" } } ] }
Marcus
Há algo que esperamos que seja uma matriz. O problema surge quando essa matriz possui apenas 1 elemento, tornando-a um objeto para o conversor de xml para json. Portanto, como esperamos que seja uma matriz para um único elemento, verificamos e convertemos em uma matriz, garantindo que tenhamos uma matriz na qual esperamos uma matriz.
kommradHomer
Mas como você espera que um elemento específico seja uma matriz? XML2JSON marca os elementos. Não está claro como esperar que seja uma matriz sem marcá-la, pois caso contrário você nunca saberia com um único elemento 'matriz'.
Marcus
Por exemplo, existe um elemento chamado "phonenumbers". E há 1 ou mais elementos "número de telefone" no elemento "números de telefone". Portanto, quando existe apenas um elemento "phonenumber" em "phonenumbers", o xml2json cria um objeto de número de telefone, mas eu crio uma matriz de número de telefone e coloco o objeto de número de telefone nele.
Não sei qual é o seu problema exato, mas se você estiver recebendo XML e quiser retornar JSON (ou algo assim), também poderá ver o JAX-B. Esse é um padrão para organizar / desmarcar Java POJO para XML e / ou Json. Existem várias bibliotecas que implementam o JAX-B, por exemplo, o CXF do Apache.
import net.sf.json.JSONObject;
ouimport org.json.JSONObject;
. Também qual jar eu preciso incluir?Respostas:
JSON em Java possui ótimos recursos.
Dependência do Maven:
XML.java
é a classe que você está procurando:A saída é:
fonte
import net.sf.json.JSONObject;
ouimport org.json.JSONObject;
. Também qual jar eu preciso incluir?<test attrib="moretest" content="foo">bar</test>
?Para converter o arquivo XML em JSON, inclua a seguinte dependência
e você pode fazer o download do Jar no repositório Maven aqui . Em seguida, implemente como:
fonte
O único problema com JSON em Java é que, se seu XML tiver um único filho, mas for uma matriz, ele será convertido em um objeto, em vez de uma matriz. Isso pode causar problemas se você sempre converter dinamicamente de XML para JSON, onde se seu exemplo de XML tiver apenas um elemento, você retornará um objeto, mas se tiver mais de 2, retornará uma matriz, o que pode causar problemas de análise para as pessoas que usam o método JSON.
A classe XML2JSON da Infoscoop tem uma maneira de marcar elementos que são matrizes antes de fazer a conversão, para que as matrizes possam ser mapeadas corretamente, mesmo se houver apenas um filho no XML.
Aqui está um exemplo de uso (em uma linguagem um pouco diferente, mas você também pode ver como as matrizes são usadas no método nodelist2json () do link XML2JSON).
fonte
<results><result><value>1</value></result></results>
, seria gerar{ "results" : { "result" : { "value" : "1" } } }
ou{ "results" : [ { "result" : { "value" : "1" } } ] }
Fiz upload do projeto que você pode abrir diretamente no eclipse e executar tudo https://github.com/pareshmutha/XMLToJsonConverterUsingJAVA
Obrigado
fonte
Achei isso da maneira mais rápida e fácil: Usado:
org.json.XML
class from java-json.jarfonte
Não sei qual é o seu problema exato, mas se você estiver recebendo XML e quiser retornar JSON (ou algo assim), também poderá ver o JAX-B. Esse é um padrão para organizar / desmarcar Java POJO para XML e / ou Json. Existem várias bibliotecas que implementam o JAX-B, por exemplo, o CXF do Apache.
fonte