2012-10-25 20 views
15

Ho uno scenario.JSON to JSON transformer

L'input e l'output richiesti sono JSON.

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


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

Ho bisogno di codice di trasformazione o linguaggio di tipo preferibilmente XSLT per trasformare json da un formato all'altro. Anche questo trasformatore deve essere veloce in quanto la trasformazione avverrà al volo.

Modifica
Non ho la definizione dell'oggetto input ricevuti e potrebbe cambiare in fase di esecuzione. ma posso usare la classe per l'oggetto OUTPUT, se necessario. Ho provato a farlo come json -> xml -> xslt -> xml -> json, ma a questo scopo circa 1000 oggetti vengono ricevuti al secondo e questo processo potrebbe comportare un sovraccarico.
Non riesco a utilizzare JavaScript poiché myApp è semplice l'applicazione java basata su Windows e l'utilizzo di JavaScript potrebbe causare un sovraccarico.

+0

sì certo, posso usare javascript. ma più preferibilmente il linguaggio di tipo xslt e il processore di trasformazione –

+3

Che dire della patch JSON? http://tools.ietf.org/html/draft-pbryan-json-patch-00 –

+1

Puoi trovare implementazioni per questo, ad esempio: https://github.com/bruth/jsonpatch-js –

risposta

4

È possibile utilizzare ZORBA e JsonIQ http://www.jsoniq.org/ Tuttavia, è una libreria nativa, viene fornito con un wrapper in modo da poterlo utilizzare in java.

+0

Dai un'occhiata al mio wrapper troppo tardi, potrebbe essere utile: https://github.com/mvallebr/ZorbaJavaWrapper – mvallebr

9

È possibile eseguire questa trasformazione con JSON patch.

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

non ho la prova, ma dovrebbe funzionare in questo modo.

+0

Un po 'di preoccupazione - Questo sarà abbastanza buono dal punto di vista delle prestazioni in quanto questo Javascript dovrà applicare circa 1000 oggetti JSON al secondo? –

+0

Dipende dalla tua situazione. Se vuoi farlo dal lato server, puoi avere diverse implementazioni in diverse lingue. Ho postato questo perché c'era un tag javascript nella tua domanda. –

+0

Sto usando java e sarà un'applicazione desktop basata su Windows. –

14

Prova JOLT. È una libreria di trasformazione JSON to JSON scritta in Java. È stato creato su un progetto che stava trasformando molto JSON da un "backend" di ElasticSearch a un frontend api.

Per il JSON trasformarti hanno elencato nel vostro problema, il Jolt "shift" spec sarebbe:

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

Si può provare libreria Java Silencio che permette per convertire ciascun nodo del file JSON in nuovi valori. Puoi decidere quali e come i nodi dovrebbero essere trasformati.

0

Un'altra opzione è la libreria Logz.io Sawmill. Definisci una pipeline ed eseguila. Per esempio:

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

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

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