Java JSONObject和JDBC返回格式json不正确
我在我的小项目中遇到了一个问题。我已经花了大约4天的时间,还没有最好的解决方案 这是我的源代码:Java JSONObject和JDBC返回格式json不正确,java,json,database,jdbc,Java,Json,Database,Jdbc,我在我的小项目中遇到了一个问题。我已经花了大约4天的时间,还没有最好的解决方案 这是我的源代码: public static JSONObject fetchPersonCarInfo() throws Exception { // get data from 2 tables: Cars and Manufacturer String query = "SELECT * from mytable"; statement =
public static JSONObject fetchPersonCarInfo() throws Exception {
// get data from 2 tables: Cars and Manufacturer
String query = "SELECT * from mytable";
statement = connection.prepareStatement(query);
rs = statement.executeQuery();
JSONArray carsArray = null;
while(rs.next()) {
carObj.put("id", (new string(rs.getString("id"))));
carsArray.put(carObj);
for(int i=0 ; i< carsArray.length() ; i++) {
manufacturerObj.put(new String(rs.getString("manufacturer_id")), carsArray);
manufacturerObj.put(new String(rs.getString("manufacturer_name")), carsArray);
}
System.out.println(manufacturerObj.toString());
}
System.out.println("Ok");
}
catch (Exception e) {
// TODO Auto-generated catch block
if (connection != null) {
connection.close();
}
throw e;
}
finally {
if (connection != null) {
connection.close();
}
}
return manufacturerObj;
}
如何更改代码以构建正确的json格式。非常感谢……carObj部分很好,因此我建议将其作为一种方法
public static JSONObject getCarJSON(String id, String name, String price) {
JSONObject carObj = new JSONObject();
carObj.put("id", id);
carObj.put("name", name);
carObj.put("price", price);
return carObj;
}
你的问题似乎就在这里。您正在将一个personCarObj
添加到carsArray
。那可能只包括汽车
JSONObject personCarObj = new JSONObject();
personCarObj.put("manufacturer_id", (new String(rs.getString("manufacturer_id"))));
personCarObj.put("manufacturer_name", (new String(rs.getString("manufacturer_name"))));
carsArray.put(personCarObj);
在这里。对于carsArray
中的每个“car”,您都将一个键值对放入manufacturerObj
中,其中值始终相同carsArray
<代码>制造商Robj可能只包含制造商信息
for(int i=0 ; i< carsArray.length() ; i++) {
manufacturerObj.put(new String(rs.getString("manufacturer_id")), carsArray);
manufacturerObj.put(new String(rs.getString("manufacturer_name")), carsArray);
}
下面的代码可能很接近(警告:未测试)。创建地图的原因是,当您已经看到制造商时,可以捕获数据,然后附加数据,而不是复制数据
JSONArray manufacturerArray = new JSONArray();
HashMap<String, JSONArray> manufacturerMap = new HashMap<String, JSONArray>();
while(rs.next()) {
String mId = rs.getString("manufacturer_id");
JSONArray carsArray = manufacturerMap.get(mId);
if (carsArray == null) {
carsArray = new JSONArray();
manufacturerMap.put(mId, carsArray);
}
JSONObject manufacturer = new JSONObject();
manufacturer.put("id", mId);
manufacturer.put("name", rs.getString("manufacturer_name"));
String carId = rs.getString("id");
String carName = rs.getString("name");
String carPrice = rs.getString("price");
carsArray.put(getCarJSON(carId, carName, carPrice));
manufacturer.put("cars", carsArray);
manufacturerArray.put(manufacturer);
}
JSONObject result = new JSONObject();
result.put("manufacturers", manufacturerArray);
JSONArray manufactureraray=new JSONArray();
HashMap manufacturerMap=新的HashMap();
while(rs.next()){
字符串mId=rs.getString(“制造商id”);
JSONArray carsArray=manufacturerMap.get(mId);
if(carsArray==null){
carsArray=new-JSONArray();
制造商映射放置(mId,carsArray);
}
JSONObject manufacturer=新的JSONObject();
制造商。放置(“id”,mId);
manufacturer.put(“name”,rs.getString(“manufacturer_name”);
字符串carId=rs.getString(“id”);
字符串carName=rs.getString(“名称”);
字符串carPrice=rs.getString(“价格”);
carsArray.put(getCarJSON(carId、carName、carPrice));
制造商。put(“汽车”,carsArray);
制造商RAY.put(制造商);
}
JSONObject结果=新建JSONObject();
结果。put(“制造商”,Manufactureraray);
你可以用Jackson/Gson做一些像这样的POJO
class Manufacturer {
String id, name;
List<Car> cars;
}
class Car {
String id, name, price;
}
类制造商{
字符串id、名称;
列出车辆清单;
}
班车{
字符串id、名称、价格;
}
然后你会序列化一个
列表
你的第一个代码示例不是JSONI会推荐类似{“制造商”:[{“id”:1,“名称”:“本田”,“汽车”:[…]},{“id”:2,“名称”:“丰田”,“汽车”:[…]}}
亲爱的cricket_007,是的,我的第一个代码不是Json,它只是Json格式供我参考输出。我想我的第二个密码有错误的地方要听。不客气。你可以表示感谢,也许这是我最好的解决办法。感谢您的支持如果需要,您也可以将id和价格解析为int/double是的,也许我会选择价格类型为double,例如:1500000越南盾(越南货币)。
JSONArray manufacturerArray = new JSONArray();
HashMap<String, JSONArray> manufacturerMap = new HashMap<String, JSONArray>();
while(rs.next()) {
String mId = rs.getString("manufacturer_id");
JSONArray carsArray = manufacturerMap.get(mId);
if (carsArray == null) {
carsArray = new JSONArray();
manufacturerMap.put(mId, carsArray);
}
JSONObject manufacturer = new JSONObject();
manufacturer.put("id", mId);
manufacturer.put("name", rs.getString("manufacturer_name"));
String carId = rs.getString("id");
String carName = rs.getString("name");
String carPrice = rs.getString("price");
carsArray.put(getCarJSON(carId, carName, carPrice));
manufacturer.put("cars", carsArray);
manufacturerArray.put(manufacturer);
}
JSONObject result = new JSONObject();
result.put("manufacturers", manufacturerArray);
class Manufacturer {
String id, name;
List<Car> cars;
}
class Car {
String id, name, price;
}