【问题标题】:Extract and copy values from JSONObject to HashMap从 JSONObject 提取值并将其复制到 HashMap
【发布时间】:2020-03-18 16:06:08
【问题描述】:

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

我想过用其他方式来做。 我正在创建我需要的键的 HashMap。 现在我想通过它传递一个 JSONObject,如果我们在 JSONObject 中找到键,它将自动使用所需的键更新 HashMap。

Spring 是否提供了一些我们可以轻松完成的功能,或者我必须循环访问它。

例如:

JSON 对象:-

{
"a":"a",
"b":"b",
"c":"c",
"d":"d",
"e":"e",
}

我创建的 HashMap :-

Map<String, Object> keys = new HashMap<>();
    keys .put("a", "");
    keys .put("b", "");

我想要一个可以传递两个参数的函数

function HashMap mapJsonToHashMap(HashMap, JSONObject) {

}

返回的 HashMap 将是:-

{
"a":"a",
"b":"b"
}

【问题讨论】:

标签: java json spring spring-boot hashmap


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以试试这样的,

    • 将 JSON 转换为 HashMap
    • 然后从转换后的地图中删除不需要的条目
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2016-10-06
      • 2014-07-08
      • 2017-09-09
      • 2020-11-25
      相关资源
      最近更新 更多