简体   繁体   中英

How to create correct JsonArray in Java using JSONObject using servlet

how can I create a JSON Object like the following, in Java using JSONObject ?

    [
  {
    "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
        }
      }
    ]
  }
]

I'm using servlet.

This my servlet code

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

My outPut JSON format

   [
  {
    "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"
          }
        }
      }
    ]
  }
]

I have tried it many times but I've been unsuccessful. Please help!

{
    "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
            }
        }
    ]
}

First of All use some formatting tool to format your json so that you can easily understand the difference in expected vs actual output.

for the polyline object you should have an array rather than object with in a object.

Json.createObjectBuilder().add("polyline", 
                              Json.createObjectBuilder().add("lat", lat).add("lon", lon))
                              )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM