简体   繁体   English

如何使用servlet使用JSONObject在Java中创建正确的JsonArray

[英]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 ? 如何使用JSONObject在Java中创建如下所示的JSON对象?

    [
  {
    "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. 我正在使用servlet。

This my servlet code 这是我的servlet代码

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 我的outPut 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"
          }
        }
      }
    ]
  }
]

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. 首先使用一些格式化工具来格式化你的json,这样你就可以很容易地理解预期与实际输出的差异。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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