java - 如何遍历LinkedTreeMap<String, Object>的所有值?

标签 java json collections treemap

所以,我有 JSON 文件和我放入 LinkedTreeMap<String, Object> 的所有数据.如果其中一个 JSON 字段很复杂:

{
    "val1": "1",
    "val2": "2",
    "val3": {
        "embVal1": "emb1",
        "embVal2": emb2
    },
    "val4": "4"
}

喜欢val3 , 映射值 Object类型将转换为其他 LinkedTreeMap<String, Object> , 我的结构看起来像 LinkedTreeMap<String, LinkedTreeMap<Sting, Object>> .

如果它body中的val3有其他复杂对象,我的值为Object类型也将转换为新的 LinkedTreeMap<String, Object>依此类推进入Json树的深处。

如何遍历结构中的所有嵌入节点?

最佳答案

我做了下面的代码,我没想那么多性能,但效果很好

AppTest.java

public class AppTest {
    
    @Test
    public void testApp() {
        LinkedTreeMap<String, Object> node = new LinkedTreeMap<>();
        LinkedTreeMap<String, Object> node2 = new LinkedTreeMap<>();
        LinkedTreeMap<String, Object> node3 = new LinkedTreeMap<>();
        
        node2.put("embembVal1", "embemb1");
        node2.put("embembVal2", "embemb2");
        
        node3.put("embVal1", "emb1");
        node3.put("embVal2", node2);
        
        node.put("val1", "1");
        node.put("val2", "2");
        node.put("val3", node3);
        node.put("val4", "4");
        
        MyJson json = new MyJson();
        json.read(node);
        
        System.out.println(MyJsonBuilder.build());
    }

}

MyJson.java

public class MyJson {
    
    public void read(LinkedTreeMap<String, Object> node) {
        MyJsonBuilder.append("{");
        
        for(Entry<String, Object> set : node.entrySet()) {
            if(!getInstanceType(set.getValue())) {
                jsonFormat(set.getKey(), set.getValue());
            } else {
                new MyJson().read( (LinkedTreeMap<String, Object>) set.getValue() );
            }
        }
        
        MyJsonBuilder.append("}");
    }
    
    private void jsonFormat(String k, Object v) {
        MyJsonBuilder.append( String.format("\"%s\":\"%s\"", k, v) );
    }
    
    private boolean getInstanceType(Object obj) {
        if(obj instanceof LinkedTreeMap) return true;
        else return false;
    }
   
}

MyJsonBuilder.java

public class MyJsonBuilder {
    
    private static StringBuilder jsonBuilder = new StringBuilder();
    
    public static void append(String node) {
        jsonBuilder.append(node);
    }
    
    private static String format(String json) {
        String adjustedjson = json;
        if (adjustedjson.contains("\"\"")) adjustedjson = adjustedjson.replaceAll("\"\"", "\",\"");
        if (adjustedjson.contains("}\"")) adjustedjson = adjustedjson.replaceAll("}\"", "},\"");
        
        return adjustedjson;
    }
    
    public static String build() {
        return format(jsonBuilder.toString());
    }
    
}

关于java - 如何遍历LinkedTreeMap<String, Object>的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51936046/

相关文章:

Java : Memory utilization issue (sudden spike observed)

java - Android FragmentActivity 和 Tab 的问题

java - 链表中的节点可以有动态数组吗?

javascript - 我的 Highchart 每次都回到 01/18/1970。为什么?

javascript - 使用 Javascript 查询 Google Distance Matrix API

sorting - 在Kotlin中对集合进行分类和分组的一种简洁方式是什么?

java - JComboBox 下拉列表不显示

java - 如何通过 jackson 库比较两个 JSON 对象的结构(忽略值)?

java - 用于存储key-value-value等元素的集合

java - map 值检索