Quels sont les bons outils pour convertir rapidement et facilement du XML en JSON en Java ?
Avertissement : Le paquet json.org.XML n'existe pas dans Android !
Quels sont les bons outils pour convertir rapidement et facilement du XML en JSON en Java ?
JSON en Java propose d'excellentes ressources.
Dépendance Maven :
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
XML.java
est la classe que vous recherchez :
import org.json.JSONObject;
import org.json.XML;
import org.json.JSONException;
public class Main {
public static int PRETTY_PRINT_INDENT_FACTOR = 4;
public static String TEST_XML_STRING =
"<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";
public static void main(String[] args) {
try {
JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
System.out.println(jsonPrettyPrintString);
} catch (JSONException je) {
System.out.println(je.toString());
}
}
}
La sortie est :
{"test": {
"attrib": "moretest",
"content": "Turn this to JSON"
}}
@danieltalsky : Quelle importation dois-je écrire ? import net.sf.json.JSONObject;
o import org.json.JSONObject;
. De plus, quel bocal dois-je inclure ?
Téléchargez tous les fichiers, pas seulement XML.java. D'ici : github.com/douglascrockford/JSON-java/downloads
Pour convertir un fichier XML en JSON, il faut inclure la dépendance suivante
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
et vous pouvez Téléchargez Jar du dépôt Maven ici . Puis mettre en œuvre comme :
String soapmessageString = "<xml>yourStringURLorFILE</xml>";
JSONObject soapDatainJsonObject = XML.toJSONObject(soapmessageString);
System.out.println(soapDatainJsonObject);
Utilisez la version de json mentionnée dans le post si vous êtes sous java 7 car la dernière version produit des erreurs bizarres.
Si vous disposez d'un fichier dtd valide pour le snippet xml, vous pouvez facilement convertir xml en json et json en xml à l'aide du lien open source eclipse jar. Un exemple détaillé de projet JAVA peut être trouvé ici : cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
Le seul problème avec JSON en Java est que si votre XML a un seul enfant, mais est un tableau, il le convertira en objet au lieu d'un tableau. Cela peut poser des problèmes si vous convertissez toujours dynamiquement le XML en JSON. Si votre exemple de XML ne comporte qu'un seul élément, vous renvoyez un objet, mais s'il en comporte plus de deux, vous renvoyez un tableau, ce qui peut poser des problèmes d'analyse pour les personnes qui utilisent le JSON.
Infoscoop's XML2JSON permet de baliser les éléments qui sont des tableaux avant d'effectuer la conversion, de sorte que les tableaux puissent être correctement mappés, même s'il n'y a qu'un seul enfant dans le XML.
Voici un exemple de l'utiliser (dans un langage légèrement différent, mais vous pouvez également voir comment arrays est utilisé à partir de la méthode nodelist2json() du lien XML2JSON).
Nous utilisons une bibliothèque "xml-to-json" en python et il s'agit d'un problème sémantique. Ce que nous faisons pour résoudre ce problème de "tableau ou objet", c'est d'écrire une méthode "tryConvertToArray()", qui renvoie un tableau avec le seul objet qu'il contient. Ainsi, vous pouvez toujours être sûr que votre valeur est un tableau.
Je ne vois pas très bien comment cela résout le problème. Est-ce que vous faites tout simplement un tableau au lieu d'un objet ? Par exemple, si j'ai le fichier XML <results><result><value>1</value></result></results>
générerait-elle { "results" : { "result" : { "value" : "1" } } }
ou { "results" : [ { "result" : { "value" : "1" } } ] }
Il y a quelque chose que l'on attend que ce soit un tableau. Le problème survient lorsque ce tableau ne comporte qu'un seul élément, ce qui en fait un objet pour le convertisseur xml-to-json. Donc, comme nous nous attendons à ce que ce soit un tableau, même pour un seul élément, nous vérifions et convertissons le tableau, en nous assurant que nous avons un tableau là où nous attendons un tableau.
J'ai téléchargé le projet que vous pouvez ouvrir directement dans eclipse et exécuter. c'est tout https://github.com/pareshmutha/XMLToJsonConverterUsingJAVA
Merci.
Au cas où quelqu'un aurait besoin d'un outil en ligne, en voici un json2csharp.com/xml-to-java
Je ne sais pas quel est votre problème exact, mais si vous recevez du XML et que vous voulez renvoyer du JSON (ou autre chose), vous pouvez également vous intéresser à JAX-B. Il s'agit d'un standard pour le marshalling/unmarshalling des POJO Java en XML et/ou Json. Il existe de nombreuses bibliothèques qui mettent en œuvre JAX-B, par exemple CXF d'Apache.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Je ne peux pas utiliser directement le XML en raison d'une exigence de la spécification, mais je suis d'accord avec vous. merci !
0 votes
@BeachRunnerJoe : Quelle importation dois-je écrire ?
import net.sf.json.JSONObject;
oimport org.json.JSONObject;
. De plus, quel bocal dois-je inclure ?0 votes
Merci beaucoup pour votre question
1 votes
Voici un lien vers un moyen de le faire sans aucune dépendance, en utilisant JAXP : stackoverflow.com/questions/27222992/
0 votes
Si vous disposez d'un fichier dtd valide pour le snippet xml, vous pouvez facilement convertir xml en json et json en xml à l'aide du lien open source eclipse jar. Un exemple détaillé de projet JAVA peut être trouvé ici : cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
26 votes
J'adore les questions fermées de SO qui ont une si grande visibilité... Quelque chose a mal tourné quelque part si une question aussi utile a été fermée.
4 votes
Je pense que 90 % des questions les plus utiles sont des "questions fermées".
0 votes
La bibliothèque Underscore-java possède une méthode statique
U.xmlToJson(xml)
. Je suis le mainteneur du projet.