当前位置: 首页 > 知识库问答 >
问题:

如何将这个JSON定义为JAVA对象

戚研
2023-03-14

我收到了以下JSON:

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

如何将其转换为JAVA对象?

共有2个答案

慕佑运
2023-03-14

这个JSON的问题在于它是一个不同类型的列表。第一个元素是一个数字(int),第二个元素是一个二维数字数组,一些int和一些double。

所以,如果您试图将其解析为一个自定义Java对象,您最多只能得到列表

我相信你想把它解析成JSON树。有几个图书馆,杰克逊是目前最受欢迎的。

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

佴英奕
2023-03-14

怎么样...

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

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

然后你就解析json并把它们读到这些类中?

 类似资料:
  • 让我们假设我有以下json 如何在java中创建一个自定义类来映射它?我试过这个班的形状 并且形状是 用Jackson地图绘制器绘制地图 正如预期的那样,给我一个错误: 我想要"0008005"作为字段值而不是字段键,这些值是根据API动态变化的,所以如何映射这个json,有没有其他直接的方法最后一个选项op自定义反序列化?

  • 我使用NewtonSoft.json来反序列化这个json

  • 问题内容: 我正在使用Jersey为服务器组件创建REST Web服务。 我要在列表中序列化的带有JAXB注释的对象如下所示: 我有一个REST资源来检索一个看起来像这样的发行版: 我还有一个REST资源来检索所有发行版的列表,如下所示: 我使用ContextResolver自定义JAXB序列化,当前配置如下: REST资源和上下文解析器都可以使用。这是第一个输出的示例: 这正是我想要的。这是列表

  • 我对大摇大摆的文档很陌生。我们有一个现有的项目正在为RESTFul Web服务开发进度语言。不同的基于资源的URL以Application/JSON格式使用和生成。下面给出了一个资源url的输入和输出json格式: 如何将上述请求和响应json格式转换为swagger 2.0 json格式? 谢了!

  • 使用此JSON,自动JSON到POJO严重失败。 请注意,不同请求的项目数量不同。在这里,我将包含两项JSON响应。 这个JSON对象的POJO会是什么样子?

  • 问题内容: 我想将自定义类型的对象添加到集合中。我有几个相同,即它们的公共变量值相同。 我不希望将多个“相同”对象的实例添加到集合中,但是每次创建新对象时,总是将其添加。 这是因为类Object的equals方法在对象上实现了最有区别的对等关系:“对于x和y的任何非空引用值,当且仅当x和y引用同一个对象时,此方法返回true(x = = y的值为true)。” 我可以覆盖此对象的equals方法以