2016-01-08 4 views
2

У меня есть объект javascript, например, следующий.Прочитать javascript-объект в java

{ 
    "name": { 
     "type": "text", 
     "onClick": function() { 
      console.log("Hello"); 
     } 
    } 
} 

Он хранится в строковом формате на Java.

String obj = "{ \"name\": { \"type\": \"text\", \"onClick\": function() { console.log(\"Hello\"); } } }"; 

Я пытаюсь выяснить способ, чтобы прочитать это OBJ в Java и траверс через граф объектов, как мы можем с помощью JSON Джексона, если у него не было объявление функции.

Есть ли какая-либо библиотека Java для чтения/разбора строки, представляющей объект javascript (а не только JSON), и пройти через граф объектов?

+0

Кто пометил, чтобы закрыть этот вопрос, укажите причину. – TheKojuEffect

+0

@PritamBanerjee Я просмотрел документацию, но не мог понять, как Apache Wink может помочь прочитать javascript-объект в java? Не могли бы вы ссылаться на конкретные разделы документации? – TheKojuEffect

+1

Я был одним из флагманов (ну, проголосовал за закрытие), потому что просить рекомендации по библиотекам не по теме в StackOverflow. Попробуйте [Рекомендации по использованию программного обеспечения] (http://softwarerecs.stackexchange.com) –

ответ

0

Вы можете использовать объект картограф из Джексона libarary конвертировать jsonString в хэш-карте

import com.fasterxml.jackson.databind.ObjectMapper; 

private Map<String, Object> getMapFromJson(String json){ 

    Map<String,Object> map = new HashMap<String,Object>(); 
    ObjectMapper mapper = new ObjectMapper(); 

    try { 
     //convert JSON string to Map 
     map = mapper.readValue(String.valueOf(json), new TypeReference<Map<String, Object>>() {}); 
     return map; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
+0

Джексон работает только для JSON. т.е. без деклараций функций. – TheKojuEffect

+0

Дело в том, что строка JSON - это только пара ключевых значений. этим вы получите свою функцию в качестве значения для ключа «onClick». I. строка. Если вам нужна функция для анализа. вам нужно искать реализацию парсера javascript в java. – Neel

0

Я предлагаю библиотеку org.json: JavaDoc URL, jar file Download

[Пример]

String obj = "{ \"name\": { \"type\": \"text\", \"onClick\": function() { console.log(\"Hello\"); } } }"; 
JSONObject json = new JSONObject(obj); 
JSONObject subJson = new JSONObject(); 

if(! json.isNull("name")){ //Determine if the value associated with the key("name") is null or if there is no value. 
    subJson = json.getJSONObject("name"); 
    if(! subJson.isNull("type")){ // Determine if the value associated with the key("type") is null or if there is no value. 
     subJson.getString("type"); // get the value : "text" 
     subJson.put("newData", "text2"); // data added under the "onclick" 
    } 
} 
+0

Не работает. org.json.JSONException: ожидается символ ',' или '}' на символе 52 – TheKojuEffect

+0

Не могли бы вы заменить свое значение как «function() {console.log (« Hello \ »);»? – bot

+0

«org.json» может читать только значение String или Number. если вы хотите поместить значение String, используйте «» (Double Quote) – bot

0

Вы может использовать Java ScriptEngine и встроенный Javascript. Нечто подобное,

String obj = "{'name':{'type': 'text', 'onClick': function(){console.log('Hello')}}}"; 
try { 
    ScriptEngine se = new ScriptEngineManager().getEngineByName("js"); 
    se.eval(String.format("Object.bindProperties(this, %s);", obj)); 
    se.eval("print(this.name.onClick)"); 
} catch (ScriptException e) { 
    e.printStackTrace(); 
} 

, который может прочитать объявление функции (и любых других obj свойств).

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