簡體   English   中英

如何將這個JSON定義為JAVA Object

[英]How to define this JSON as a JAVA Object

我收到以下 JSON:

[
    669124,
    [
        [
            40135,
            5,
            0.68395602
        ],
        [
            40134,
            1,
            0.03737
        ]
    ]
]

我怎樣才能把它變成 JAVA Object?

怎么樣...

public class Outer {
   private int field1;
   private List<Inner> field2;
}

public class Inner {
   private int field1;
   private int field2;
   private double field3;
}

然后你只是解析 json 並將它們讀入這些類?

這個特定的 JSON 的問題在於它是一個不同類型的列表。 第一個元素是數字 (int),第二個是二維數字數組,一些是整數,一些是雙精度數。

因此,如果您嘗試將其解析為自定義 Java object,您最多只能得到List<Object> ,或者只是Object

我相信您想將其解析為 JSON 樹。 有幾個庫,Jackson 是目前最受歡迎的。

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

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

public class JsonTest {
    String JSON = "[\n" +
        "    669124,\n" +
        "    [\n" +
        "        [\n" +
        "            40135,\n" +
        "            5,\n" +
        "            0.68395602\n" +
        "        ],\n" +
        "        [\n" +
        "            40134,\n" +
        "            1,\n" +
        "            0.03737\n" +
        "        ]\n" +
        "    ]\n" +
        "]";
    
    @Test
    public void testJson() throws JsonProcessingException {
        ObjectMapper om = new ObjectMapper();
        JsonNode doc = om.readTree(JSON);
    
        assertThat(doc.isArray(), is(true));
        JsonNode element1 = doc.get(0);
        assertThat(element1.isInt(), is(true));
        assertThat(element1.asInt(), is(669124));
    
        JsonNode element2 = doc.get(1);
        assertThat(element2.isArray(), is(true));
    
        assertThat(element2.get(0).get(0).intValue(), is(40135));
        assertThat(element2.get(0).get(1).intValue(), is(5));
        assertThat(element2.get(0).get(2).doubleValue(), is(0.68395602));
    
        assertThat(element2.get(1).get(0).intValue(), is(40134));
        assertThat(element2.get(1).get(1).intValue(), is(1));
        assertThat(element2.get(1).get(2).doubleValue(), is(0.03737));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM