Aller au contenu
  • 0
Do92

Conversion json en XML

Question

Bonjour à tous,

Suite à la formation API, j'ai récupéré tout un catalogue produits en format json sur une API. Je l'ai parsé et ça me crée ma liste de produits. Le problème c'est que ça me crée mes 950 enregistrements un par un, et  pour chacun je dois faire un nouvel appel à l'API pour récupérer mes prix par produits, puis parser le retour. Résultat : 30 minutes pour charger mon catalogue. C'est trop long car je dois mettre à jour ce catalogue toutes les 15 minutes notamment pour l'état des stocks de produits. De plus, je ne peux pas mettre à jour les enregistrements, je dois les supprimer et les recréer à chaque mise à jour.

J'ai d'autres catalogues que je récupère en format XML, et que j'importe avec mise à jour des enregistrements avec feuille XSLT. C'est beaucoup plus rapide. Exemple : 10.000 produits en moins d'une minute.

Donc question : est-ce que quelqu'un aurait eu la bonne idée de créer un script ou une fonction perso pour convertir - rapidement - du json XML ? (réponse espérée : "oui" :) )

Merci d'avance et bonne journée à tous !

Partager ce message


Lien à poster
Partager sur d’autres sites

8 réponses à cette question

Messages recommandés

  • 0

Salut,

Il y a plusieurs outils en ligne qui permettent de faire des conversions bi-directionnelles Json<->Xml (comme celui-ci par exemple : https://codebeautify.org/jsonviewer ).

Mais j'imagine que tu souhaites automatiser cette conversion, il faudrait alors trouver une fonction personnalisée qui puisse le faire (j'ai rapidement regardé sur les deux principaux sites de partage, mais je n'ai malheureusement rien trouvé de probant… à revérifier tout-de-même : http://www.briandunning.com/filemaker-custom-functions/ ; http://www.fmfunctions.com ).

Sinon, reste la solution d'une application autonome qui puisse être "pilotée" à partir de FileMaker… mais n'étant absolument pas familier de l'environnement Windows, je laisse volontiers aux spécialistes de ce système le soin de te conseiller…

Enfin, il y a peut-être des lignes de commande (Shell, Bash, etc.) de conversion qui existent et qui peuvent être lancées à partir de FileMaker mais, là aussi, avis aux spécialistes…

N'hésites surtout pas à nous tenir informés de tes découvertes :)

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Hello,

Merci pour ce retour Fredo !

Oui en effet j'ai exploré les convertisseurs en ligne mais je voudrais automatiser la procédure. J'ai même cherché un convertisseur avec API en espérant pouvoir envoyer mon doc Json et qu'il me le retourne en XML, ou avec la fonction insérer depuis URL, mais sans succès.

J'ai également fouillé dans les custom functions de Brian Dunning et autres, et sur de nombreux forums, mais sans succès non plus.

Je me suis donc lancée dans un script, en vue d'un faire si possible une fonction perso ensuite, mais je bloque. D’où mon post :)

Petite note supplémentaire, ce programme devra tourner sur serveur.

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

J'ai  été confronté au même problème et comme toi, mon premier réflexe à  été de me retourner vers XML.

Mais, hélas (et tant mieux aussi)  XML n'est pas aussi "permissif" que JSON en terme de nom d'objet/d'élément ou d'array et certains développeurs Web ne font vraiment attention à ces règles de base… (et oui, même les devs de Twitter)

  • Les noms peuvent contenir des lettres, des chiffres et autres caractères
  • Les noms ne peuvent pas commencer par un nombre ou un caractère de ponctuation.
  • Les noms ne peuvent pas commencer par les lettres xml (ou XML, ou Xml…etc)
  • Les noms ne peuvent pas contenir d'espaces.

Après m'être retrouvé pour la nième fois confronté à un json de ce genre:

Citation

{
    "post":     {
       "2017-11-05 12:30":[
            {
               "ID": "a1b1c1-fg5484-1547",
               "name": "xxxxxxxxxxxxxxxx",
               "request": "yyyy",
               "content": null
           },
         {
               "ID": "975fga-5411cv-1008"",
               "name": "zzzzzzzzzzzzz",
               "request": null,
               "type": "…
          …etc

je me suis retourné vers une conversion CSV.

Elle tourne sous ScriptMaster avec une petite poignée de fichiers jars (certains inutiles mais hélas nécessaires en terme de dépendances).

Reste à savoir si elle t'intéresse?

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour, nous avons tenté avec Do de faire un fichier jar qui reçoit un json et le transforme en xml en travaillant avec les librairies de json.org

Cela a l'air de fonctionner pour des cas assez simples, reste à voir si cela fonctionnerait pour tout. Si cela vous intéresse je vous envoie cela

Le fonctionnement est plutôt basique : on met un fichier test.json sur le bureau, on lance le jar, ca sort un output.xml qui devrait être exploitable.

J'ai tenté de le lancer avec smload de script master sans succès mais je n'ai pas plus creusé que cela alors j'ai opté pour exporter contenu rubrique avec ouverture automatique du jar.

Tom

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

J'ai réussi (ou presque) la conversion via un script. Mais c'est au final aussi long que de parser le résultat Json, voire encore plus long... Les solutions jar semblent plus adaptées mais je ne maîtrise pas vraiment. Elle sont également dépendantes de l'environnement sur lequel tourne le script. Pas simple... Merci à tous malgré tout.

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

… avec ScriptMaster, cela peux éventuellement dépanner… JSON-Lib n'est certes pas l'API la plus véloce… (un JSON complexe de 4700 'enreg.' (3.7Mo) est lu, sérialisé et converti en XML en 2/3 s.)

JSON2XML( path2json ; path2xml ) // avec des chemins de fichiers au format 'System' bien sûr.

RegisterGroovy( "JSON2XML( path2json ; path2xml )" ; "import net.sf.json.JSONObject¶
import net.sf.json.xml.XMLSerializer¶
¶
def object = JSONObject.fromObject(new File(path2json).text)¶
def serializer = new XMLSerializer(¶
        rootName : 'root',¶
        typeHintsEnabled : false¶
)¶
def file = new File( path2xml )¶
file.write (serializer.write(object), \"UTF-8\")"; "isGui=false" )

Le jar et ces dépendances, tu les trouveras là :

https://mvnrepository.com/artifact/net.sf.json-lib/json-lib/2.4
https://mvnrepository.com/artifact/net.sf.ezmorph/ezmorph/1.0.6
https://mvnrepository.com/artifact/xom/xom/1.2.5
https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils/1.8.0
https://mvnrepository.com/artifact/commons-collections/commons-collections/3.2.1
https://mvnrepository.com/artifact/commons-lang/commons-lang/2.6
https://mvnrepository.com/artifact/commons-logging/commons-logging/1.1.1

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

Matt Petrowsky vient de publier une vidéo là-dessus.

https://www.filemakermagazine.com/videos/parsing-xml-json

Au delà de la conversion de XML en JSON (tu veux le sens inverse, mais tu trouverais), la méthode en javascript est intéressante.

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

salut
Avec scriptmaster on peut aussi utiliser la librairie Java-Json.jar sans dépendances

import org.json.JSONObject;
import org.json.XML;

	Object obj = new FileReader(jsonPath);
	JSONObject jsonObj = new JSONObject(obj.text);
	String xml_result = XML.toString(jsonObj);
	Writer fileWriter = new FileWriter(xmlPath);
	fileWriter.write(xml_result );
	fileWriter.close();

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×