2016-06-14 5 views
1

JSONObjectを使用してJavaで次のようなJSONオブジェクトを作成するにはどうすればよいですか?サーブレットを使用してJSONObjectを使用してJavaで正しいJsonArrayを作成する方法

[ 
    { 
    "title": "ZAKI", 
    "start": "2010-05-01", 
    "placemarks": [ 
     { 
     "polyline": [ 
      { 
      "lat": 48.22467264956519, 
      "lon": 16.32568359375 
      }, 
      { 
      "lat": 47.517200697839414, 
      "lon": 18.984375 
      }, 
      { 
      "lat": 45.84410779560204, 
      "lon": 15.9521484375 
      }, 
      { 
      "lat": 48.22467264956519, 
      "lon": 16.32568359375 
      } 
     ] 
     }, 
     { 
     "point": { 
      "lat": 48.22467264956519, 
      "lon": 16.32568359375 
     } 
     }, 
     { 
     "point": { 
      "lat": 47.517200697839414, 
      "lon": 18.984375 
     } 
     }, 
     { 
     "point": { 
      "lat": 45.84410779560204, 
      "lon": 15.9521484375 
     } 
     } 
    ] 
    } 
] 

私はサーブレットを使用しています。

この私のサーブレットコード

JSONArray arrayObj = new JSONArray(); 
      for (int i = 0; i < listDataTracking.size(); i++) { 
       JSONObject obj = new JSONObject(); 
       EntityTracking dataTracking = listDataTracking.get(i); 

       if (dataTracking.getIdTracking() == null) { 
        obj.put("Id", ""); 
       } else { 
        obj.put("Id", dataTracking.getIdTracking()); 
        obj.put("title", dataTracking.getUser_name().getUserName().toUpperCase()); 
        obj.put("start", sdf.format(dataTracking.getTglSend())); 
//          
        String lat = ""; 
        String lon = ""; 
        String jamSend = ""; 
        Long id = 0l; 
//      

        String queryStmnt_geoTracking = "SELECT entityGeoTracking.id FROM EntityGeoTracking entityGeoTracking " 
          + "WHERE entityGeoTracking.idTracking.idTracking=\"" + dataTracking.getIdTracking() + "\""; 
        javax.persistence.Query query_geoTracking = em.createQuery(queryStmnt_geoTracking); 
        System.out.println("Isi queryStmnt_geoTracking" + queryStmnt_geoTracking); 
        List<EntityGeoTracking> cekid = query_geoTracking.getResultList(); 
        if (cekid.isEmpty()) { 
         System.out.println("Isi cekid == null"); 
         return; 
        } 
        System.out.println("Isi cekid" + cekid); 
        EntityGeoTracking dataGeoTraking = em.find(EntityGeoTracking.class, cekid); 
        if (lat.isEmpty()) { 

         lat = dataGeoTraking.getGetLatitude(); 
        } 
        if (lon.isEmpty()) { 
         lon = dataGeoTraking.getGetLongitude(); 
        } 
        if (id == 0l) { 
         id = dataGeoTraking.getId(); 
        } 
        if (jamSend.isEmpty()) { 
         jamSend = dataGeoTraking.getJamSend(); 
        } 
        System.out.println("chek value lat, lon, id, jamSend" + lat + "" + lon + "" + id + "" + jamSend); 

        javax.json.JsonArray value = Json.createArrayBuilder() 
          .add(Json.createObjectBuilder() 
          .add("polyline", Json.createObjectBuilder() 
          .add("lat", lat) 
          .add("lon", lon))) 
          .add(Json.createObjectBuilder() 
          .add("point", Json.createObjectBuilder() 
          .add("lat", lat) 
          .add("lon", lon))) 
          .build(); 


        obj.put("placemarks", value); 

       } 



       arrayObj.add(obj); 
      } 

      em.close(); 

      JSONObject rows = new JSONObject(); 

//   rows.put("results", arrayObj);//results 
//   rows.put("results", listDataTracking.size());//results 
//   rows.put("rows", arrayObj); 
//   writer.print(rows.toString()); 
//   rows.put("", listDataTracking.size());//results 
      rows.put("", arrayObj); 
      System.out.println(" List : " + arrayObj.toString()); 
      writer.print(arrayObj); 
      writer.close(); 

//   } 
//   br.close(); 

     } catch (Exception ex) { 
      ex.getMessage(); 
      System.out.println("ERROR: " + ex.getMessage()); 
     } finally { 
      if (em != null && em.isOpen()) { 
       em.close(); 
      } 
     } 
    } 

マイ出力JSON形式は

[ 
    { 
    "Id": 1, 
    "title": "ZAKI", 
    "start": "2016-06-15", 
    "placemarks": [ 
     { 
     "polyline": { 
      "lat": { 
      "chars": "-6.2206080", 
      "string": "-6.2206080", 
      "valueType": "STRING" 
      }, 
      "lon": { 
      "chars": "106.7810640", 
      "string": "106.7810640", 
      "valueType": "STRING" 
      } 
     } 
     }, 
     { 
     "point": { 
      "lat": { 
      "chars": "-6.2206080", 
      "string": "-6.2206080", 
      "valueType": "STRING" 
      }, 
      "lon": { 
      "chars": "106.7810640", 
      "string": "106.7810640", 
      "valueType": "STRING" 
      } 
     } 
     } 
    ] 
    } 
] 

私はそれを何度も試してみましたが、私は失敗してきました。助けてください!

+2

サーブレットを使用しているかどうかは、ここでは無関係です。正しいデータを読み込んだとします(自分のコードをデバッグするなどして自分で確認できます)、問題はJSON配列をどのように構築するかのようです。それは 'results [0] .toString();などが実際に返すものをチェックするべきだと言いました。 'entityGeoTracking.getLatitude'(それは奇妙なプロパティー名btwです)は、数値や文字列を返すだけでなく、いくつかのラッパーオブジェクトを返すことがあります。 – Thomas

答えて

0
{ 
    "title": "ZAKI", 
    "start": "2010-05-01", 
    "placemarks": [ 
     { 
      "polyline": [ 
       { 
        "lat": 48.2246726495652, 
        "lon": 16.32568359375 
       }, 
       { 
        "lat": 47.5172006978394, 
        "lon": 18.984375 
       }, 
       { 
        "lat": 45.844107795602, 
        "lon": 15.9521484375 
       }, 
       { 
        "lat": 48.2246726495652, 
        "lon": 16.32568359375 
       } 
      ] 
     }, 
     { 
      "point": { 
       "lat": 48.2246726495652, 
       "lon": 16.32568359375 
      } 
     }, 
     { 
      "point": { 
       "lat": 47.5172006978394, 
       "lon": 18.984375 
      } 
     }, 
     { 
      "point": { 
       "lat": 45.844107795602, 
       "lon": 15.9521484375 
      } 
     } 
    ] 
} 

まず第一には、あなたが簡単に実際の出力VS、期待の違いを理解できるように、JSONをフォーマットするsome formatting toolを使用しています。

ポリラインオブジェクトの場合は、オブジェクトではなくオブジェクトの配列でなければなりません。

Json.createObjectBuilder().add("polyline", 
           Json.createObjectBuilder().add("lat", lat).add("lon", lon)) 
          ) 
関連する問題