从http响应中返回的字符串化javascript函数中检索json

时间:2013-08-25 20:33:09

标签: java javascript json rhino javascript-engine

我有java(JDK6)代码,它发送带参数的http get请求。我得到的响应是一个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,因为返回的“thing”类型为sun.org.mozilla.javascript.internal.NativeObject。
我试图找出如何最终转换从invokeFunction方法返回的这个对象最初从“JavascriptFunction”方法返回的json树。

1 个答案:

答案 0 :(得分:0)

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

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

JavaScript代码中没有“JSON树”这样的东西。这是一个JavaScript对象文字表达式,也就是说它只是一个普通的JavaScript对象。