在java中读取javascript对象

时间:2016-01-08 05:31:26

标签: javascript java json jackson

我有一个javascript对象,如下所示。

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

它以字符串格式存储在Java中。

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

我试图找出一种方法来在Java中读取这个obj,并像使用Jackson那样使用JSON遍历对象图,如果它没有函数声明的话。

是否有任何Java库来读取/解析表示javascript对象(不仅仅是JSON)的字符串并遍历对象图?

3 个答案:

答案 0 :(得分:3)

您可以使用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属性)。

答案 1 :(得分:0)

您可以使用jackson libarary中的object mapper将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;
    }
}

答案 2 :(得分:0)

我建议使用图书馆org.json:JavaDoc URLjar 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"
    }
}