Muitos dados com colchetes [] apareceram no banco de dados do projeto. O teste relatou um bug. Após a solução de problemas, foi causado pelo uso do pacote JSON-LIB JAR. O JSON-LIB converte valores nulos em [] durante o processo de conversão de strings XML em formato JSON. Agora, resumirei brevemente as semelhanças e diferenças entre os dois pacotes XML e JSON. Talvez porque essas perguntas sejam relativamente básicas, embora alguém tenha feito essas perguntas on -line, não foram encontradas respostas. Para facilitar os programadores juniores como eu para descobrir e resolver problemas o mais rápido possível, escrevi esta postagem no blog.
A maioria dos pacotes JAR para XML para JSON que pode ser encontrada on-line são net.sf.json-lib. Este pacote é usado mais na análise JSON, mas a desvantagem é que ele requer mais pacotes de dependência. Mas aqui vou falar apenas sobre o XML dele com JSON.
1.net.sf.json-lib para json;
Json json = xmlSerializer.read (xml);
O problema com esse método é que ele converterá o valor nulo para []. Use json.get (valor) .getClass para obter o tipo de []. Você pode descobrir que o JSON-LIB reconhece o valor nulo como um tipo jsonArray em vez de uma string, e o método de tostring de jsonArray é reescrito como [,,,]
Se você ainda deseja usar esse método, pode fazer as seguintes modificações. Ao usar o método getString () para obter o valor do objeto JSON convertido do XML, primeiro determine se o tipo é string e depois o obtenha.
json.get (value) instanceof string? json.getString (valor): ""
2. Org.json para JSON:
org.json.jsonObject jsonObj = org.json.xml.tojsonObject (xml);
O valor [] não será gerado, mas a etiqueta raiz será retida (o documento XML padrão possui e apenas uma etiqueta root, a chamada etiqueta raiz é um par de tags <root> </ad Tags> contendo todas as outras tags), e a etiqueta raiz geral não tem sentido para os dados; portanto, se você precisar fazer o processamento
jsonObj.get ("root");Aqui está o código de teste:
pacote com.pptv.ppvision.util; importar org.json.xml; importação net.sf.json.jsonObject; importar net.sf.json.xml.xmlSerializer; classe pública xml2jSontest {private static string xml = "<somic> <suser> <name> wess </name> <sex> </xex> </asuser> </root>"; public static void main (string [] args) {testorgjson (); testxmlSerializer (); } public static void testorgjson () {org.json.jsonObject jsonObj = xml.tojsonObject (xml); System.out.println ("org.json xml2json:"+jsonObj); org.json.jsonObject user = jsonobj.getjsonObject ("root"). getjsonObject ("user"); // org.json precisa remover o sistema de tags root.out.println ("nome de usuário:"+user.getString ("name")); System.out.println ("gênero:"+user.getString ("sexo")); } public static void testxmlSerializer () {xmlSerializer xmlSerializer = new XMLSerializer (); JsonObject jsonObject = (jsonObject) xmlSerializer.read (xml); System.out.println ("JSON-LIB XML2JSON Resultado:"+JsonObject); JsonObject User = jsonObject.getjsonObject ("Usuário"); System.out.println ("Nome do usuário:"+user.get ("nome")); System.out.println ("gênero:"+(user.get ("sexo") instanceof string? User.getString ("sexo"): "" "); }}Aqui estão dois métodos para você
Um é usar o método gettring () para obter o valor do objeto JSON convertido do XML, primeiro determinar se o tipo é string e depois obtê -lo.
Um é Org.json
Você pode escolher qual método usar de acordo com suas necessidades