Transformador JSON a JSON

Tengo un escenario.

La entrada y la salida requeridas son JSON.

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

Necesito algún código de transformación o preferiblemente lenguaje de tipo xslt para transformar json de un formato a otro. Este transformador también necesita ser rápido ya que la transformación se realizará sobre la marcha.

Editar
No tengo la definición del objeto INPUT recibido y podría cambiar en tiempo de ejecución. pero puedo usar la clase para el objeto OUTPUT si es necesario. He intentado hacer esto como json -> xml -> xslt -> xml -> json , pero aproximadamente 1000 objetos se reciben por segundo en este extremo y este proceso puede incurrir en gastos generales.
Tampoco puedo usar JavaScript ya que myApp es una aplicación java basada en Windows simple y el uso de JavaScript puede causar gastos generales.

Puede usar ZORBA y JsonIQ http://www.jsoniq.org/ Sin embargo, es una biblioteca nativa, viene con un contenedor para que pueda usarla en Java.

Prueba JOLT . Es una biblioteca de transformación JSON a JSON escrita en Java. Fue creado en un proyecto que estaba transformando gran cantidad de JSON de un “back-end” de ElasticSearch a una API de frontend.

Para la transformación JSON que ha enumerado en su problema, la especificación Jolt “shift” sería:

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

Puedes hacer esta transformación con el parche JSON .

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

No probé esto, pero debería funcionar así.

Puede probar la biblioteca de Java Silencio que le permite convertir cada nodo del archivo JSON en nuevos valores. Puede decidir qué y cómo se deben transformar los nodos.

Otra opción es usar la biblioteca Logz.io Sawmill . Usted define una tubería y la ejecuta. Para tu ejemplo:

 { steps: [ { rename { config { from: "OldObject" to: "NewObject" } } } { removeField { config { path: "NewObject.price" } } } { rename { config { from: "NewObject.Name" to: "NewObject.Title" } } } ] }