我有Json(json的整个格式可以随时变化)字符串如下,
{"domain": {
"id": "file",
"value": "Content",
"popup": {
"menuitem1": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
我已转换为地图,其键和值如下,
Map<String, Object> jsonMap = new HashMap<String, Object>();
ObjectMapper mapper = new ObjectMapper();
jsonMap = mapper.readValue(jsonString,new TypeReference<HashMap<String,Object>>(){});
KEY :domain
VALUE :{id=file, popup={menuitem=[{value=New, onclick=CreateNewDoc()}, {value=Open, onclick=OpenDoc()}, {value=Close, onclick=CloseDoc()}],}, value=Content}
如何通过将其名称传递给地图来访问每个值,例如
map.get(id) = file
map.get(popup) = {menuitem=[{value=New, onclick=CreateNewDoc()}, {value=Open, onclick=OpenDoc()}, {value=Close, onclick=CloseDoc()}]}
map.get(value) = Content
答案 0 :(得分:0)
如果你想从地图中获取内部字段,你需要使用一个非常不舒服的语法:
((Map<String, Object>)jsonMap.get("domain")).get("id") // returns "file"
我认为你可以在一个方便的类中读取你的json,你可以手动创建它。 该类将包含json中包含的所有字段,您可以使用 get 方法访问它们。
class DomainClass {
public InnerDomain domain;
}
class MenuItem {
public String value;
public String onclick;
}
class PopupClass {
public List<MenuItem> menuitem1;
}
class InnerDomain {
public String id;
public String value;
public PopupClass popup;
}
类 DomainClass 是您需要用来反序列化json的主类。使用jackson非常简单,它看起来就像你在你的情况下使用的方法:
ObjectMapper mapper = new ObjectMapper();
DomainClass domainObj = mapper.readValue(jsonString, DomainClass.class);
// print the id field
System.out.println(domainObj.domain.id);