我有一个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)的字符串并遍历对象图?
答案 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 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"
}
}