De nombreuses données avec des supports [] sont apparues dans la base de données du projet. Le test a signalé un bogue. Après le dépannage, il a été causé par l'utilisation du package JSON-LIB. JSON-LIB convertit les valeurs nulles en [] pendant le processus de conversion des chaînes XML au format JSON. Maintenant, je résumerai brièvement les similitudes et les différences entre les deux packages XML à JSON. Peut-être parce que de telles questions sont relativement basiques, bien que quelqu'un ait posé de telles questions en ligne, aucune réponse n'a été trouvée. Afin de faciliter les programmeurs juniors comme moi pour découvrir et résoudre des problèmes dès que possible, j'ai écrit ce billet de blog.
La plupart des packages JAR pour XML à JSON qui peuvent être trouvés en ligne sont net.sf.json-lib. Ce package est plus utilisé dans l'analyse JSON, mais l'inconvénient est qu'il nécessite plus de packages de dépendance. Mais ici, je ne parlerai que de son XML à JSON.
1.net.sf.json-lib à json;
JSON JSON = xmlSerializer.read (xml);
Le problème avec cette méthode est qu'il convertira la valeur nul en []. Utilisez json.get (valeur) .getClass pour obtenir le type de []. Vous pouvez constater que JSON-LIB reconnaît la valeur null en tant que type JSONArray au lieu d'une chaîne, et la méthode TOSTRING de JSONArray est réécrite comme [,,,,,]
Si vous souhaitez toujours utiliser cette méthode, vous pouvez effectuer les modifications suivantes. Lorsque vous utilisez la méthode getString () pour obtenir la valeur de l'objet JSON converti à partir de XML, déterminez d'abord si le type est de la chaîne, puis obtenez-le.
json.get (valeur) instance de chaîne? json.getString (valeur): ""
2. Org.json à json:
org.json.jsonObject JSONOBJ = org.json.xml.tojsonObject (xml);
La valeur [] ne sera pas générée, mais la balise racine sera retenue (le document XML standard a et une seule balise racine, la soi-disant balise root est une paire de <tags root> </ root étiquettes> contenant toutes les autres balises), et la balise racine générale n'a pas de sens aux données, donc si vous devez effectuer le traitement
jsonObj.get ("root");Voici le code de test:
package com.pptv.ppvision.util; import org.json.xml; importer net.sf.json.jsonObject; importer net.sf.json.xml.xmlserializer; classe publique xml2jSonTest {chaîne statique privée xml = "<hoot> <utilisateur> <nom> wesset </name> <ex> </sex> </ user> </ 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 doit supprimer la balise racine System.out.println ("nom d'utilisateur:" + user.getString ("name")); System.out.println ("Gender:" + user.getString ("Sex")); } public static void testXmlSerializer () {xmlSerializer xmlSerializer = new XMLSerializer (); JSONObject JSONObject = (JSONObject) xmlSerializer.read (xml); System.out.println ("JSON-LIB XML2JSON Résultat:" + JSONObject); JsonObject user = jsonObject.getjsonObject ("utilisateur"); System.out.println ("Nom d'utilisateur:" + user.get ("name")); System.out.println ("Gender:" + (user.get ("sex") instance de chaîne? User.getString ("sexe"): "")); }}Voici deux méthodes pour vous
L'une consiste à utiliser la méthode getString () pour obtenir la valeur de l'objet JSON converti à partir de XML, déterminez d'abord si le type est de la chaîne puis l'obtenez.
L'un est org.json
Vous pouvez choisir la méthode à utiliser en fonction de vos besoins