184 votes

Le moyen le plus rapide de convertir XML en JSON en Java

Quels sont les bons outils pour convertir rapidement et facilement du XML en JSON en Java ?

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; o import org.json.JSONObject; . De plus, quel bocal dois-je inclure ?

0 votes

Merci beaucoup pour votre question

214voto

danieltalsky Points 2897

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"
}}

14 votes

Avertissement : Le paquet json.org.XML n'existe pas dans Android !

2 votes

@danieltalsky : Quelle importation dois-je écrire ? import net.sf.json.JSONObject; o import org.json.JSONObject; . De plus, quel bocal dois-je inclure ?

2 votes

Téléchargez tous les fichiers, pas seulement XML.java. D'ici : github.com/douglascrockford/JSON-java/downloads

62voto

Krishna Points 708

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);

6 votes

+ pour les dépendances maven fournies

2 votes

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.

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

32voto

Marcus Points 167

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).

0 votes

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.

0 votes

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" } } ] }

0 votes

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.

3voto

pareshm Points 193

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.

0 votes

Au cas où quelqu'un aurait besoin d'un outil en ligne, en voici un json2csharp.com/xml-to-java

1voto

Martin Sturm Points 522

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.com

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.

Powered by:

X