我想在JavaScript代碼中生成一個數據結構,並從Java(Rhino 6或7)中處理結果。如何將Rhino生成的JSON數據結構(NativeObject)轉換爲Java數據結構?
我成功地將調用從Java的JS功能:
Object result = invocableEngine.invokeFunction(functionName, parameters);
現在,JS的一面,這個結果是一個JSON數據結構如下:
{
"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] } ]
}
在Java方面,然而,「結果」是類型的對象sun.org.mozilla.javascript.internal.NativeObject
有沒有辦法讓我把它轉換成合理的Java數據結構,而沒有將該JSON序列化爲字符串,然後使用Gson解析它的開銷?
假定數據結構合理定義好的時刻例如, 我知道這個對象是一個帶有鍵「key1」和「key2」的散列,第一個映射到帶有鍵「key1_1」和「key1_2」的散列。第二個映射到哈希數組,每個哈希都有標量鍵「key2_1」和「key2_2」,以及數組「key2_3」。
我2個重點是,按照這個順序:
- 性能(這就是爲什麼我很警惕連載+ GSON-解析的) 的Java 6,7和8(但之間
- 可移植性,我更喜歡速度更快的非便攜式解決方案)。
是有問題,把它留在犀牛格式,並通過數據訪問它結構體?我認識到它會有一些開銷,但我不認爲沒有轉換爲字符串和反序列化就沒有任何替代方案。 – ghostbust555 2015-03-19 15:09:24
@ ghostbust555 - 我認爲「通過Rhino格式訪問」是一種有效的方法,但不知道如何做到這一點。似乎沒有任何像樣的文檔可以找到,尤其是對於散列號 – DVK 2015-03-19 15:12:08
呵呵。哇,他們只是有史以來最糟糕的文件。試試result.getAttributes(「key1」)? – ghostbust555 2015-03-19 15:27:55