Java 将值从JSONObject提取并复制到HashMap
我有一个包含多达1000个键的JSON。我需要一些特别的钥匙。 而不是遍历JSON并查找键并将其值放入所需参数中 我想用另一种方式做。 我正在创建所需密钥的哈希映射。 现在我想通过它传递一个JSONObject,如果我们在JSONObject中找到键,它会自动用所需的键更新HashMap Spring是否提供了一些函数,我们可以轻松地完成它,或者我必须循环使用它 例如: JSONObject:-Java 将值从JSONObject提取并复制到HashMap,java,json,spring,spring-boot,hashmap,Java,Json,Spring,Spring Boot,Hashmap,我有一个包含多达1000个键的JSON。我需要一些特别的钥匙。 而不是遍历JSON并查找键并将其值放入所需参数中 我想用另一种方式做。 我正在创建所需密钥的哈希映射。 现在我想通过它传递一个JSONObject,如果我们在JSONObject中找到键,它会自动用所需的键更新HashMap Spring是否提供了一些函数,我们可以轻松地完成它,或者我必须循环使用它 例如: JSONObject:- { "a":"a", "b":"b", "c":"c", "d":"d", "e":"e", }
{
"a":"a",
"b":"b",
"c":"c",
"d":"d",
"e":"e",
}
我创建的HashMap:-
Map<String, Object> keys = new HashMap<>();
keys .put("a", "");
keys .put("b", "");
返回的HashMap将是:-
{
"a":"a",
"b":"b"
}
IMO 1000个键不是什么大问题,所以我会选择一个简单的解决方案,将其反序列化为一个对象,然后使用流进行过滤/映射。比如:
ObjectMapper objectMapper = new ObjectMapper();
Set<String> keys = new HashSet<>();
keys.add("key-1");
keys.add("key-3");
List<Parameter> list =
objectMapper.readValue("[{ \"key\":\"key-1\", \"value\":\"aaa\" }, { \"key\":\"key-2\", \"value\":\"bbb\" }, { \"key\":\"key-3\", \"value\":\"ccc\" }]", new TypeReference<List<Parameter>>(){});
List<Parameter> filteredList = list.stream()
.filter(l -> keys.contains(l.getKey()))
.collect(Collectors.toList());
// in case you really want to put results in a Map
Map<String, String> KeyValueMap = filteredList.stream()
.collect(Collectors.toMap(Parameter::getKey, Parameter::getValue));
public class Parameter
{
private String key;
private String value;
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}
ObjectMapper ObjectMapper=new ObjectMapper();
Set keys=new HashSet();
密钥。添加(“密钥-1”);
图例。添加(“图例3”);
列表=
objectMapper.readValue(“[{\'key\':\'key-1\',\'value\':\'aaa\',{\'key\':\'key-2\',\'value\':\'bbb\',{\'key\':\'key-3\',\'value\':\'ccc\'”,新类型引用(){});
List filteredList=List.stream()
.filter(l->keys.contains(l.getKey()))
.collect(Collectors.toList());
//如果你真的想把结果放在地图上
Map KeyValueMap=filteredList.stream()
.collect(Collectors.toMap(参数::getKey,参数::getValue));
公共类参数
{
私钥;
私有字符串值;
公共字符串getKey()
{
返回键;
}
公共无效设置键(字符串键)
{
this.key=key;
}
公共字符串getValue()
{
返回值;
}
公共void设置值(字符串值)
{
这个值=值;
}
}
你可以试试这样的东西
- 将JSON转换为HashMap
- 然后从转换后的地图中删除不需要的条目
public HashMap-mapJsonToHashMap(HashMap键,JSONObject-json){
//将JSON转换为HashMap
ObjectMapper mapper=新的ObjectMapper();
Map jsonMap=mapper.readValue(json,Map.class);
//迭代jsonMap并删除无效键
for(Iterator it=jsonMap.entrySet().Iterator();
it.hasNext();){
Map.Entry=it.next();
如果(!keys.containsKey(entry.getKey())){
it.remove();
}
}
返回jsonMap;
}
您可以使用
JsonPath
库,也可以使用streamingapi
。另见:
ObjectMapper objectMapper = new ObjectMapper();
Set<String> keys = new HashSet<>();
keys.add("key-1");
keys.add("key-3");
List<Parameter> list =
objectMapper.readValue("[{ \"key\":\"key-1\", \"value\":\"aaa\" }, { \"key\":\"key-2\", \"value\":\"bbb\" }, { \"key\":\"key-3\", \"value\":\"ccc\" }]", new TypeReference<List<Parameter>>(){});
List<Parameter> filteredList = list.stream()
.filter(l -> keys.contains(l.getKey()))
.collect(Collectors.toList());
// in case you really want to put results in a Map
Map<String, String> KeyValueMap = filteredList.stream()
.collect(Collectors.toMap(Parameter::getKey, Parameter::getValue));
public class Parameter
{
private String key;
private String value;
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}
public HashMap mapJsonToHashMap(HashMap keys, JSONObject json) {
// Convert JSON to HashMap
ObjectMapper mapper = new ObjectMapper();
Map<String, String> jsonMap = mapper.readValue(json, Map.class);
// Iterate jsonMap and remove invalid keys
for(Iterator<Map.Entry<String, String>> it = jsonMap .entrySet().iterator();
it.hasNext(); ) {
Map.Entry<String, String> entry = it.next();
if(!keys.containsKey(entry.getKey())) {
it.remove();
}
}
return jsonMap;
}