2016-10-04 18 views
2

私の小さなプロジェクトで問題が発生しました。私は約4日を費やしていますが、まだ最良の解決策はありません。JSONObjectとJDBCの戻り形式jsonが正しくありません

これは私のソースコードです:

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形式で自分のコードをビルドし、urlで展開:

{ 
    "1": 
    [ 
     { 
      "manufacturer_id": "1", 
      "manufacturer_name": "Honda" 
     }, 
     { 
      "id": "4", 
      "name": "Honda1", 
      "price": "66000" 
     } 
    ],   
} 

上記のjson形式と同じように正しくビルドするためにコードを変更する必要があります。どうもありがとうございました...

+0

あなたの最初のコードサンプルは、私が希望JSON –

+0

ないシリアライズでしょう。この

class Manufacturer { String id, name; List<Car> cars; } class Car { String id, name, price; } 

ようないくつかのPOJOのを作るためにジャクソン/ Gsonを使用することができます"{" id ":1、" name ":"ホンダ "、"車 ":[...]}、{" id ":2、" name ":" Toyota " 、 "cars":[...]}]} ' –

+0

親愛なるcricket_007、はい私の最初のコードはJsonではありません。私の2番目のコードにはいくつかの間違いがあると思います。 – luongkhanh

答えて

0

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; 
} 

あなたの問題はここにあるようです。 carsArraypersonCarObjを追加しています。それはおそらく車が含まれているはずです。

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のすべての「自動車」について、値が常にcarsArrayであるmanufacturerObjにキーと値のペアを入れます。 manufacturerObjになります。には製造元の情報が含まれています。

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); 
} 

ので、これらの勧告に、あなたはあなたの最初に非JSON表示のようなものを取得しようとします。

{ 
    "manufacturers": [{ 
     "id": "1", 
     "name": "Honda", 
     "cars": [{ 
      "id": "4", 
      "name": "Honda1", 
      "price": "66000" 
     }] 
    }, { 
     "id": "2", 
     "name": "Toyota", 
     "cars": [{ 
      "id": "551", 
      "name": "Toyota51", 
      "price": "3233333" 
     }] 
    }] 
} 

、以下のコードは近いかもしれません( 警告:テストされていません)。マップの理由は、製造元を見たときにキャプチャし、重複するのではなくデータを追加することです。

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); 

あなたそして、あなたがList<Manufacturer>

+0

Cricket_007親愛なる人、私はそれを手に入れました! – luongkhanh

+0

嬉しいです。どういたしまして。あなたは[回答を受け入れる](感謝)を表示することができます –

+0

それは私にとって最高の解決策かもしれません。あなたのサポートのためにありがとう – luongkhanh

関連する問題