0

我有发送带有参数的http get请求的java(JDK6)代码。我得到的响应是一个 javascript 函数,其中包含一个 json 树,其中包含对请求中提供的查询参数的响应,如下所示:

function JavascriptFunction() { return { "Root" : [ { ... ] }; }

我正在尝试使用 java 中的 ScriptEngine api 绑定并执行返回的函数以检索 JSON 节点。

String response = EntityUtils.toString(httpResponse.getEntity());
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByExtension("js");
scriptEngine.eval(response);

String hopeThisIsJson = (String)((Invocable)scriptEngine).invokeFunction("JavascriptFunction");

我得到一个 ClassCastException,因为返回的“东西”是 sun.org.mozilla.javascript.internal.NativeObject 类型。
我试图弄清楚如何最终将从invokeFunction方法返回的这个对象转换为最初从“JavascriptFunction”方法返回的json树。

4

1 回答 1

0

您的 JavaScript 函数正在返回一个非 JSON 编码的对象。你可以试试这个:

String json = (String) scriptEngine.eval("JSON.stringify(JavascriptFunction());");

JavaScript 代码中没有“JSON 树”之类的东西。那是一个 JavaScript 对象字面量表达式,也就是说它只是一个普通的 JavaScript 对象。

于 2013-08-25T20:36:37.460 回答