Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将值从JSONObject提取并复制到HashMap_Java_Json_Spring_Spring Boot_Hashmap - Fatal编程技术网

Java 将值从JSONObject提取并复制到HashMap

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", }

我有一个包含多达1000个键的JSON。我需要一些特别的钥匙。 而不是遍历JSON并查找键并将其值放入所需参数中

我想用另一种方式做。 我正在创建所需密钥的哈希映射。 现在我想通过它传递一个JSONObject,如果我们在JSONObject中找到键,它会自动用所需的键更新HashMap

Spring是否提供了一些函数,我们可以轻松地完成它,或者我必须循环使用它

例如:

JSONObject:-

{
"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;
}