java如何访问JSON值
不确定如何访问此JSON中的“points”值。我是一个初学者,读过教程,但我仍然不知道如何获得这个值,因为它不在它自己的数组中,比如[],而是使用{}
编辑
我设法解决了这个问题,for循环中的这一行需要转换为String:
polyline = (String) objPoints.get("points");
编辑:
我尝试了另一种方法,但是我无法获得我想要的数据。我的代码不会产生输出,我的System.out.println
不会显示在控制台中
public void getDirections() {
try {
String polyline = "";
URL url = new URL("https://maps.googleapis.com/maps/api/directions/json?origin=Bournemouth+University&destination=" + houseNumber + "+" + address + "+" + city + "&key=AIzaSyBn2qYJcHoNCgNQZv1mcycnUo06sJDZPBs");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
int responseCode = conn.getResponseCode();
if (responseCode != 200) {
throw new RuntimeException("HttpResponseCode: " + responseCode);
} else {
Scanner scan = new Scanner(url.openStream());
StringBuilder jsonIn = new StringBuilder();
while (scan.hasNextLine()) {
jsonIn.append(scan.nextLine());
}
scan.close();
System.out.println(jsonIn.toString());
JSONParser parser = new JSONParser();
JSONObject objRoot = (JSONObject) parser.parse(jsonIn.toString());
JSONArray routesArray = (JSONArray) objRoot.get("routes");
for (int i = 0; i < routesArray.size(); i ++) {
JSONObject objOverviewPolyline = (JSONObject) routesArray.get(i);
JSONObject objPoints = (JSONObject) objOverviewPolyline.get("overview_polyline");
polyline = objPoints.get("points").toString();
}
System.out.println("POLYLINE " + polyline);
}
}catch (Exception e) {
e.printStackTrace();
}
JSON(“points”值位于底部):
这是我到目前为止的代码,它生成了以下错误:
Unexpected token RIGHT BRACE(}) at position 0.
at org.json.simple.parser.JSONParser.parse(JSONParser.java:257)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
at CustomerMap.getDirections(CustomerMap.java:73)
at CustomerMap.<init>(CustomerMap.java:39)
CustomerMap类别代码:
JSONParser parser = new JSONParser();
JSONObject jObj = (JSONObject)parser.parse(result);
JSONArray jsonArray = (JSONArray)jObj.get("routes");
for (int i = 0; i < jsonArray.size(); i ++) {
JSONObject jObjPolyline = (JSONObject)jsonArray.get(i);
JSONObject jObjPoints = (JSONObject)jObjPolyline.get("overview_polyline");
JSONArray jsonPolylineArray = (JSONArray)jObjPolyline.get("points");
for (int j = 0; j < jsonPolylineArray.size(); j ++) {
polyline = jsonPolylineArray.get(j).toString();
}
}
我相信这是一个非常简单的问题,我知道有人会将此标记为重复的问题,但我只是想得到一些帮助,谢谢
# 1 楼答案
如果先写出JSON结构,就更容易了
如果试图访问
overview_polyline
中的points
值您可以使用以下代码执行此操作:
如果您试图访问
steps
中的points
值你可以这样做:
# 2 楼答案
关于
points
的检索:最有帮助的是首先在我的脑海中组装正确的JSON路径。有很多工具可以这样做,例如http://jsonpath.com/您可以在这里找到
points
对象:如果这些信息不足以增强您的实现,这里有一个工作示例:
这是一种非常直接的方法,特别显示了JSON的嵌套结构。 也许你还应该考虑为整个结构实现一个特定的POJO……然后解析就容易了:
文档底部的
points
可以通过上面的routes
对象直接访问:# 3 楼答案
1-构建此对象的类
2-去检查一下这可能对你有帮助Gson