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

时间:2019-05-27 10:38:25

标签: java json postgresql resultset spring-jdbc

我正在从postgreSQL DB中读取表,并将所有列及其值填充到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 个答案:

答案 0 :(得分:0)

采用其他方法。

1)首先创建所需列的pojo

    <html>
    <head>
    <script type="text/javascript">
    <!--
    // Dividi la totalità del traffico per il numero di array (es. 100/3 o 100/4, a seconda del numero di links[X]. La seguente impostazione è per avere 66 e 33 )
    var links = new Array();
    links[0] = "URL DEL FORM A";
    links[1] = "URL DEL FORM A";
    links[2] = "URL DEL FORM B";

    function openLink() {
      // Chooses a random link:
      var i = Math.floor(Math.random() * links.length);
      // Directs the browser to the chosen target:
      parent.location = links[i];
      return false;
    }
    //-->
    </script>
    </head>
    <body onload="openLink();">
    </body>
    </html>

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

3)使用

  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.