如何解析字段名稱不確定的json字符串


問題如下

  下面是一個json字符串,有其他系統提交過來的,當前需要對該json字符串進行解析,需要注意的是,外層的key是不確定的(隨機的字符串),但是內層的value字段名稱和類型都可以確定。

{
    "fa490c67-bdb2-4ddd-810d-894e9ceeba0e":{
        "top":191,
        "left":55,
        "process_to":[
            "bd7c788d-9d2f-48da-80ad-726edb8dffb1"
        ]
    },
    "bd7c788d-9d2f-48da-80ad-726edb8dffb1":{
        "top":171,
        "left":281,
        "process_to":[

        ]
    }
}

  

解析方案

package cn.ganlixin.test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class JsonUtilsTest {

    @Test
    public void test() throws JsonProcessingException {
        String s = "{\"fa490c67-bdb2-4ddd-810d-894e9ceeba0e\":{\"top\":191,\"left\":55,\"process_to\":[\"bd7c788d-9d2f-48da-80ad-726edb8dffb1\"]},\"bd7c788d-9d2f-48da-80ad-726edb8dffb1\":{\"top\":171,\"left\":281,\"process_to\":[]}}";

        ObjectMapper objectMapper = new ObjectMapper();
        final JsonNode jsonNode = objectMapper.readTree(s);

        // 進行迭代
        final Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();
        fields.forEachRemaining(item -> {
            MyOutEntity myOutEntity = new MyOutEntity();
            myOutEntity.setKey(item.getKey());
            try {
                MyInnerEntity myInnerEntity = objectMapper.readValue(item.getValue().toString(), MyInnerEntity.class);
                myOutEntity.setMyInnerEntity(myInnerEntity);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            // 打印解析完的一個對象
            System.out.println(myOutEntity);
        });
        
        // JsonUtilsTest.MyOutEntity(key=fa490c67-bdb2-4ddd-810d-894e9ceeba0e, myInnerEntity=JsonUtilsTest.MyInnerEntity(top=191, left=55, process_to=[bd7c788d-9d2f-48da-80ad-726edb8dffb1]))
        //JsonUtilsTest.MyOutEntity(key=bd7c788d-9d2f-48da-80ad-726edb8dffb1, myInnerEntity=JsonUtilsTest.MyInnerEntity(top=171, left=281, process_to=[]))
    }

    @Data
    private static class MyOutEntity {
        private String key;
        private MyInnerEntity myInnerEntity;
    }

    @Data
    private static class MyInnerEntity {
        private Integer top;
        private Integer left;
        private List<String> process_to;
    }
}

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM