web-dev-qa-db-fra.com

Transformateur JSON à JSON

J'ai un scénario.

L'entrée et la sortie requises sont JSON.

// Input
{
  "OldObject": {
    "Time": 1351160457922,
    "Name": "OName",
    "quantity": 100,
    "price": 10
  }
}


// Output
{
  "NewObject": {
    "Time": 1351160457922,
    "Title": "OName",
    "quantity": 100
  }
}

J'ai besoin d'un code de transformation ou de préférence d'un langage de type xslt pour transformer json d'un format à un autre. Ce transformateur doit également être rapide car la transformation se fera à la volée .

Modifier
Je n'ai pas reçu la définition de l'objet INPUT et cela pourrait changer au moment de l'exécution. mais je peux utiliser la classe pour un objet OUTPUT si nécessaire ..__ J'ai essayé de le faire en tant que json -> xml -> xslt -> xml -> json , mais environ 1000 objets sont reçus par seconde à cette fin et ce processus peut entraîner des frais généraux.
Je ne peux pas aussi utiliser JavaScript, car myApp est simple une application Java basée sur Windows et utiliser JavaScript pourrait entraîner une surcharge. 

21

Vous pouvez utiliser ZORBA et JsonIQ http://www.jsoniq.org/ Cependant, c'est une bibliothèque native, elle est livrée avec un wrapper afin que vous puissiez l'utiliser en Java.

4
mvallebr

Essayez _ _ JOLT . C'est une bibliothèque de transformation JSON à JSON écrite en Java. Il a été créé sur un projet qui transformait beaucoup de JSON d'un "backend" ElasticSearch à une API frontend.

Pour la transformation JSON que vous avez répertoriée dans votre problème, la spécification de "décalage" de Jolt serait:

// Jolt "shift" spec
{
    "OldObject": {
        "Time": "NewObject.Time",   
        "Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value
                                   // to "NewObject.Title
        "quantity": "NewObject.quantity"
    }
}
18
Milo S

Vous pouvez effectuer cette transformation avec patch JSON .

Exemple avec jsonpatch-js :

var transformations = [
  { move: '/OldObject', to: '/NewObject' },
  { remove: '/NewObject/price' },
  { move: '/NewObject/Name', to: '/NewObject/Title' }
];

var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } };

jsonpatch.apply(oldObject, transformations);

Je n'ai pas testé cela, mais devrais travailler comme ça.

10
KARASZI István
1
Udhaya

Une autre option est d'utiliser Logz.io Sawmill library. Vous définissez un pipeline et l'exécutez. Pour vous exemple:

{
  steps: [
    {
      rename {
         config {
            from: "OldObject"
            to: "NewObject"
         }
      }
    }

    {
      removeField {
        config {
          path: "NewObject.price"
        }
      }
    }

    {
      rename {
        config {
          from: "NewObject.Name"
          to: "NewObject.Title"
        }
      }
    }
  ]
}
1
Asaf Mesika

Vous pouvez essayer la bibliothèque Java Silencio qui vous permet de convertir chaque noeud du fichier JSON en nouvelles valeurs. Vous pouvez décider lequel et comment les nœuds doivent être transformés.

0
Damian