杰克逊对象映射器将JsonArray转换为JsonString

时间:2020-05-19 03:26:54

标签: spring-boot jackson

我正在尝试使用timestamp,x和y字段转换下面的Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\MyName\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__ return self.func(*args) TypeError: stack() takes 0 positional arguments but 1 was given

JsonArray

致JsonString

[
  1588464000,
  1,
  0
],
[
  1589068800,
  0,
  0
]
]

我得到以下回应,我得到以下回应

[ {
    "timestamp": "1367712000",
     "x": 6898,
      "y": 18728,
   }
]

String jsonString2 = mapper.writer().writeValueAsString(response);

不确定如何获取jsonArray的正确响应,而正义主体将成为响应的一部分。想知道我在响应中获取标头信息,状态代码,statusValue

PayLoadDto

{
 "headers": {
  "Strict-Transport-Security": [
   ],
 "Access-Control-Expose-Headers": [
   ],
 "Status": ["200 OK"],
 "Content-Length": ["3105"],
 "Server": ["x.com"],
  "Access-Control-Allow-Origin": [ "*"]
 },
 "body": "[[1588464000,1,0],[1589068800,1,0],",
 "statusCode": "OK",
 "statusCodeValue": 200
}

1 个答案:

答案 0 :(得分:0)

根据OP的注释,数据将始终按timestampxy的顺序排列。因此,我们可以将json主体读取为List<List<String>>,然后将值设置为PayloadDto对象。

// Fetch data from API
ResponseEntity<String> response = restTemplate.exchange( url, HttpMethod.GET, request, String.class );

// Read body from response
String jsonBody = response.getBody();

// Read jsonBody as List
ObjectMapper mapper = new ObjectMapper();
List<List<String>> dataList = mapper.readValue(jsonBody, new TypeReference<List<List<String>>>(){});

// Convert List to POJO List
List<PayLoadDto> payLoadDtos = new ArrayList<>();
dataList.forEach(item -> {
    PayLoadDto payLoadDto = new PayLoadDto();
    payLoadDto.setTimestamp(item.get(0));
    payLoadDto.setX(Integer.parseInt(item.get(1)));
    payLoadDto.setY(Integer.parseInt(item.get(2)));
    payLoadDtos.add(payLoadDto);
});

// Convert POJOs to JSON String
System.out.println(mapper.writeValueAsString(payLoadDtos));

输出:

[
  {
    "x": 1,
    "y": 0,
    "timestamp": "1588464000"
  },
  {
    "x": 1,
    "y": 0,
    "timestamp": "1589068800"
  }
]