java - 使用“item1.item1A”之类的键访问地图中的深层对象
问题描述
我有几个映射,它们的键是字符串,它的值是 Objects ( Map<String, Object>
)。这些对象可以是其他映射、列表或文字值(类似于内存中的 JSON 表示)。例子:
myMap = {
"users": [
{
"name": "Foo",
"surname": "Bar"
},
{
"name": "John",
"surname": "Doe"
}
]
}
我不想重新发明轮子,所以我想知道是否有一个 Java 库可以让我做这样的事情:
String secondUserSurname = (String) myMap.get("users[1].surname");
谢谢
编辑:为了澄清,我需要表达式“users[1].surname”是一个字符串。我会在内存中拥有这个数据结构,并在 .properties 文件中拥有表达式。属性文件将告诉在地图中访问哪个对象。这样,我可以快速更改对象以访问更改属性文件,而无需更改需要昂贵部署的 Java 代码。
解决方案
如果您有可用的内容,String
那么bytes
您可以使用任何json
库将其反序列化为 aPOJO
并获取字段。下面是杰克逊的一个例子:
class UserObject {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
class User {
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
驱动代码:
String content = "{" +
" \"users\": [" +
" {" +
" \"name\": \"Foo\"," +
" \"surname\": \"Bar\"" +
" }," +
" {" +
" \"name\": \"John\"," +
" \"surname\": \"Doe\"" +
" }" +
" ]" +
"}";
ObjectMapper objectMapper = new ObjectMapper();
UserObject userObject = objectMapper.readValue(content, UserObject.class);
System.out.println(userObject.getUsers().get(0).getSurname());
推荐阅读
- angular - Firebase 导致在 Angular 应用上打开网站时出现延迟
- themes - Launch 主题中的色板
- time - EXCEL:SUMIFS 函数即使满足要求,也不会将值添加到总数中
- xml - XML 格式化成组
- angular - Angular 8 ngForm 不执行操作
- javascript - 开玩笑问题“ReferenceError:未定义测试”
- installation - 安装 Ocaml 后缺少 ocamlrun
- django - DRF:如何为我的属性预取查询集?
- python - 如何限制 python 日志记录文件的大小?
- reactjs - 反应选择特定的参考