Sto provando a generare una struttura dati all'interno del codice JavaScript ed elaborare i risultati da Java (Rhino in Java 6 o 7).Come posso convertire una datastruttura JSON prodotta da Rhino (NativeObject) in una infrastruttura dati Java?
sono riuscito a invocare la funzione JS da Java utilizzando:
Object result = invocableEngine.invokeFunction(functionName, parameters);
Ora, sul lato JS, quel risultato è una struttura dati JSON come segue:
{
"key1" : { "key1_1" : "value1_1", "key1_2" : 11 },
"key2" : [ { "key2_1": "foo2"
, "key2_1" : "bar2" },
{ "key2_1": "foo2"
, "key2_1" : "bar2"
, "key2_3" : [1,2,3] } ]
}
Sul lato Java, tuttavia, "risultato" è un oggetto di tipo sun.org.mozilla.javascript.internal.NativeObject
C'è un modo per me di convertirlo in una ragionevole infrastruttura Java, senza avere il sovraccarico di serializzare quel JSON su una stringa e quindi usare Gson per analizzarlo?
Si supponga per il momento che la struttura dati sia ragionevolmente ben definita, ad es. So che l'oggetto è un hash con le chiavi "key1" e "key2", le prime mappe ad un hash con le chiavi "key1_1" e "key1_2"; il secondo mappa una serie di hash, ognuno dei quali ha le chiavi "key2_1" e "key2_2" che sono scalari e "key2_3" che è una matrice.
Le mie priorità sono 2, in questo ordine:
- prestazioni (che è uno dei motivi per cui io sono diffidare di serializzare + GSON-parse)
- portabilità tra Java 6, 7 e 8 (tuttavia , Preferirei una soluzione non portatile materialmente più veloce).
c'è un problema a lasciare in formato Rhino e l'accesso attraverso i dati struttura? Riconosco che avrebbe qualche sovraccarico, ma non penso ci siano alternative senza convertirsi a stringhe e deserializzare. – ghostbust555
@ ghostbust555 - Penso che "accedere attraverso il formato di Rhino" sia un approccio valido, ma non sono sicuro di come farlo.Non sembra esserci alcuna documentazione decente che riesca a trovare, specialmente per gli hash – DVK
eh. wow hanno solo la peggiore documentazione di tutti i tempi. Prova result.getAttributes ("key1")? – ghostbust555