有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring JDBCTemplate:构造不带特殊字符的JSON

我正在从postgreSQL数据库读取表,并将所有列及其值填充到json对象中

postgre中的一列是json类型。所以输出有很多转义字符。下面是键dummykeyname

 {
        "XY": "900144",
        "id": 1,
        "date": 1556167980000,
        "type": "XX50",
        "dummykeyname": {
            "type": "json",
            "value": "{\"XXXX\": 14445.0, \"YYYY\": 94253.0}"
        }
 }

我想让输出看起来像

  "value": "{"XXXX": 14445.0, "YYYY": 94253.0}"

我用的代码是

JSONArray entities = new JSONArray();

var rm = (RowMapper<?>) (ResultSet result, int rowNum) -> {

while (result.next()) {
    JSONObject entity = new JSONObject();
    ResultSetMetaData metadata = result.getMetaData();
    int columnCount = metadata.getColumnCount() + 1;
    IntStream.range(1, columnCount).forEach(nbr -> {
      try {
        entity.put(result.getMetaData().getColumnName(nbr), result.getObject(nbr));
      } catch (SQLException e) {
        LOGGER.error(e.getMessage());
      }
    });
    entities.add(entity);
  }
  return entities;
};

使用的图书馆:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

请告诉我哪里出了问题


共 (1) 个答案

  1. # 1 楼答案

    采取不同的方法

    1)首先创建所需列的pojo

      ex : if your table has 4 columns
             id, name, country, mobile create a class Employee and populate the class using rowmapper available in spring jdbc.
    

    2)创建一个类EmployeeList,它具有List,将rowmapper中创建的每个Employee对象添加到声明的List中

    3)使用

    a) ObjectMapper mapper = new ObjectMapper();
    b) mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    c) mapper.writeValueAsString(EmployeeListobjects);