2013-08-25 5 views
0

У меня есть код java (JDK6), который отправляет запрос http get с параметрами. Ответ, что я вернусь является Java-функцией, которая содержит внутри себя JSon дерево, содержащее ответ на параметры запросов, указанных в запросе, как следующее:Извлечение json из строковой функции javascript, возвращаемой в ответе http

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

Я пытающийся связываться и выполнять возвращаемую функцию используя ScriptEngine api в java для извлечения узла 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, дерево json, которое было первоначально возвращено из метода JavascriptFunction.

+0

Вы проверили значение ответа здесь: Строковый ответ = EntityUtils.toString (httpResponse.getEntity()); –

+0

Я проверил значение. Это была строгая функция Javascript. – user2714310

ответ

0

Функция JavaScript возвращает объект, который не кодируется JSON. Вы можете попробовать:

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

В коде JavaScript нет такой вещи как «дерево JSON». Это буквальное выражение объекта JavaScript, что означает, что это просто простой объект JavaScript.

+0

Я попробовал то, что вы предложили. Я получаю javax.script.ScriptException ... ReferenceError: «JSON» не определен. Модифицированный движок Rhino, возможно, не поддерживает версию Javascript, в которой существует «JSON». В этом случае я должен предположить, что я не могу изменять версии. Какие-либо альтернативы использованию этого? – user2714310

+1

@ user2714310 да, вам нужно 1.7 релиз Rhino по крайней мере. Если вы не можете изменить версии, вам придется использовать набор инструментов JSON, например, тот, который доступен на json.org. – Pointy

+0

Спасибо за информацию. Я посмотрю. – user2714310

 Смежные вопросы

  • Нет связанных вопросов^_^