我从Resultset
服务器获取mySQL
,并希望将其作为JSON
发送回客户端。
服务器在Java EE
..
我一直在寻找这个......但没什么简单的.. 那个基本过程真的必须那么难吗? 或者我的理解有什么不对吗?
答案 0 :(得分:3)
使用Jackson进行JSON处理。如果您将结果转换为POJO,只需使POJO Jackson兼容(例如,getters将自动序列化或使用@JsonProperty
。
将pojo转换为JSON的示例:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(somePojo);
如果您不将结果转换为POJO,则可以使用名为JsonNode
的{{1}}子类。
示例:
ObjectNode
然而,最常见和最简洁的方法是从您的函数返回POJO(无论是EJB还是REST服务或类似),然后让框架将它转换为JSON(通常框架使用Jackson) 。这意味着您的方法只返回某种 Jackson兼容的模型对象。
答案 1 :(得分:2)
https://gist.github.com/mreynolds/603526
public String convertResultSetToJson(ResultSet resultSet) throws SQLException {
Joiner commaJoiner = Joiner.on(", \n");
StringBuilder builder = new StringBuilder();
builder.append("{ \"results\": [ ");
List<String> results = new ArrayList<String>();
while (resultSet.next()) {
List<String> resultBits = new ArrayList<String>();
ResultSetMetaData metaData = resultSet.getMetaData();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
StringBuilder resultBit = new StringBuilder();
String columnName = metaData.getColumnName(i);
resultBit.append("\"").append(columnName).append("\": \"").append(resultSet.getString(i)).append("\"");
resultBits.add(resultBit.toString());
}
results.add(" { " + commaJoiner.join(resultBits) + " } ");
}
builder.append(commaJoiner.join(results));
builder.append("] }");
return builder.toString();
}
答案 2 :(得分:0)
您可以使用JSONObject
提供的org.json
。
将org.json.JSONObject
导入您的文件。然后您可以按如下方式转换结果集:
jsonObject = new JSONObject();
jsonObject.put(key,resultSet.getInt(resultSet.findColumn(columname)));
return jsonObject.toString();
因此,如果您想将名为NO_OF_DAYS且值为3的列返回到json对象(例如此{"days" : "3"}
)中,则将代码编写为:
jsonObject.put("days",resultSet.getInt(resultSet.findColumn("NO_OF_DAYS")));
答案 3 :(得分:0)
@SuppressWarnings("unchecked") //we use 3rd-party non-type-safe types...
public static String convertResultSetToJson(ResultSet resultSet) throws SQLException
{
JSONArray json = new JSONArray();
ResultSetMetaData metadata = resultSet.getMetaData();
int numColumns = metadata.getColumnCount();
while(resultSet.next()) //iterate rows
{
JSONObject obj = new JSONObject(); //extends HashMap
for (int i = 1; i <= numColumns; ++i) //iterate columns
{
String column_name = metadata.getColumnName(i);
obj.put(column_name, resultSet.getObject(column_name));
}
json.add(obj);
}
return json.toJSONString();
}
你可以轻松使用:JsonUtils.convertResultSetToJson(...)
从Maven Central抓住JAR,
<!-- https://mvnrepository.com/artifact/com.ohadr/ohadr.commons -->
<dependency>
<groupId>com.ohadr</groupId>
<artifactId>ohadr.commons</artifactId>
<version>0.3</version>
</dependency>
答案 4 :(得分:0)
我建议将以下问题用作解决您的问题的方法 Most efficient conversion of ResultSet to JSON?
简单,可采用,并且对org.json和java.sql以外的库没有依赖性。