下面的"数据点"的Java POJO类是什么? 数据点不是常量,它们的值、数量和计数可以增加或减少.

下面是我从代码中得到的输出,其中我得到了反斜杠.

[
    {
        "id": "346id71",
        "arg": {
            "test1": "pass",
            "task": "true",
            "direction": "right"
        },
        "datapoints": "{\"1694473620\":0.0008208249347420499,\"1694509620\":0.0008401434897869077,\"1694545620\":0.0008438824499876583,\"1694581620\":0.0008171293069653031,\"1694617620\":0.0008596749524634415,\"1694653620\":0.0008368097665295172}"
    },
    {
        "id": "346id72",
        "arg": {
            "test1": "pass",
            "task": "true",
            "direction": "left"
        },
        "datapoints": "{\"1694473620\":0.0008208249347420499,\"1694509620\":0.0008401434897869077,\"1694545620\":0.0008438824499876583,\"1694581620\":0.0008171293069653031,\"1694617620\":0.0008596749524634415,\"1694653620\":0.0008368097665295172}"
    }
]

下面是所需的输出,但我在上面的"数据点"中得到了反斜杠

[
    {
        "id": "346id71",
        "arg": {
            "test1": "pass",
            "task": "true",
            "direction": "right"
        },
        "datapoints": {
            "1680012000": 0.10124447461480172,
            "1680048000": 8.39834838777665454,
            "1680084000": 8.33850837187659432,
            "1680120000": 8.35752337464636549
            }
    },
    {
        "id": "346id72",
        "arg": {
            "test1": "pass",
            "task": "true",
            "direction": "left"
        },
        "datapoints": {
            "1680012000": 0.123233,
            "1680048000": 3.567384,
            "1680084000": 4.476530,
            "1680120000": 0.0,
            "1680156000": 0.0
          }
    }
]

我try 了很多,但找不到合适的解决方案来删除反斜杠.

这是我的模型班


public class Response {

    private String id;
    private Arg arg;
    private String datapoints;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Arg getArg() {
        return arg;
    }
    public void setArg(Arg arg) {
        this.arg = arg;
    }
    public String getDatapoints() {
        return datapoints;
    }
    public void setDatapoints(String datapoints) {
        this.datapoints = datapoints;
    }
    
    
}

数据点的输入字符串如下所示

{"1694473620":0.0008232249347420499,"1694509620":0.0008405554897869077,"1694545620":0.0008438824476576583,"1694581620":0.0008171293069653031,"1694617620":0.0008596749524634415,"1694653620":0.0008368097665295172}

推荐答案

您应该具有以下 struct .我使用Jackson来处理反序列化/序列化,使用Lombok来处理POJO字段的getters/setters/toString.

正如其他人提到的,datapoints的类型应该是StringDouble之间的Map.

import java.util.Arrays;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;

public class ParseJson {
    private static final String SAMPLE_JSON_DATA = "[{\"id\":\"346id71\",\"arg\":{\"test1\":\"pass\",\"task\":\"true\",\"direction\":\"right\"},\"datapoints\":{\"1680012000\":0.10124447461480172,\"1680048000\":8.398348387776654,\"1680084000\":8.338508371876594,\"1680120000\":8.357523374646366}},{\"id\":\"346id72\",\"arg\":{\"test1\":\"pass\",\"task\":\"true\",\"direction\":\"left\"},\"datapoints\":{\"1680012000\":0.123233,\"1680048000\":3.567384,\"1680084000\":4.47653,\"1680120000\":0,\"1680156000\":0}}]";

    private static ObjectMapper mapper = new ObjectMapper();

    public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
        Response[] response = mapper.readValue(SAMPLE_JSON_DATA, Response[].class);
        System.out.println("\nOUTPUT :- Object::toString");
        System.out.println(Arrays.toString(response));
        System.out.println("\nOUTPUT :- ObjectMapper::writeValueAsString");
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(response));
    }

    @Data
    private static class Arg {
        String test1, task, direction;
    }

    @Data
    private static class Response {
        private String id;
        private Arg arg;
        private Map<String, Double> datapoints;
    }
}

输出

以下是.toString()电话:

[
  ParseJson.Response(
    id=346id71,
    arg=ParseJson.Arg(test1=pass, task=true, direction=right),
    datapoints={
      1680012000=0.10124447461480172,
      1680048000=8.398348387776654,
      1680084000=8.338508371876594,
      1680120000=8.357523374646366}
  ),
  ParseJson.Response(
    id=346id72,
    arg=ParseJson.Arg(test1=pass, task=true, direction=left),
    datapoints={
      1680012000=0.123233,
      1680048000=3.567384,
      1680084000=4.47653,
      1680120000=0.0,
      1680156000=0.0}
  )
]

还有.writerWithDefaultPrettyPrinter().writeValueAsString()电话:

[ {
  "id" : "346id71",
  "arg" : {
    "test1" : "pass",
    "task" : "true",
    "direction" : "right"
  },
  "datapoints" : {
    "1680012000" : 0.10124447461480172,
    "1680048000" : 8.398348387776654,
    "1680084000" : 8.338508371876594,
    "1680120000" : 8.357523374646366
  }
}, {
  "id" : "346id72",
  "arg" : {
    "test1" : "pass",
    "task" : "true",
    "direction" : "left"
  },
  "datapoints" : {
    "1680012000" : 0.123233,
    "1680048000" : 3.567384,
    "1680084000" : 4.47653,
    "1680120000" : 0.0,
    "1680156000" : 0.0
  }
} ]

Java相关问答推荐

如果给定层次 struct 级别,如何从其预序穿越构造n元树

RxJava PublishSubject缓冲区元素超时

Java函数式编程中的双值单值映射

Java .类参数不通过构造函数传递

基本时态运算的ISO-8601周数据表示法

为什么我要创建一个单独的互斥体/锁对象?

如何以干净的方式访问深度嵌套的对象S属性?

JavaFX Maven Assembly插件一直打包到错误的JDK版本

内存中的H2修剪尾随空格

如何获取Instant#of EpochSecond(?)的最大值

SonarLint:只能有条件地调用方法(S)

如何在不删除Java中已有内容的情况下覆盖文件内容?

Cordova Android Gradle内部版本组件不兼容

X=x*0.90;产生有损转换误差.X*=0.90;不是.为什么?

JFree Chart从图表中删除边框

在java中使用不同的application.properties-jar而不使用Spring

Java嵌套流查找任意值

在Java中将.GRF转换为图像文件

如何在Maven Central上部署?

如何利用OpenTelemeter将初始值(零)输出到普罗米修斯