使用GET REST调用提取以json格式返回的不同值

时间:2012-07-04 17:35:32

标签: java json string rest

我正在开发一个应用程序,我在其中使用GET REST调用来获取一些特定的节点,这些节点返回以下json格式的节点:

[

   {

    "nodeId": "30",

    "datasetId": "2",

    "localId": "30",
    "datasetName": "Optimal Travel Route",
    "nodeName": "Location30",
    "nodeDesc": "Find the optimal travel route using travelling salesman problem  ",
    "nodeStatus": "Private",
    "gpsLat": "8.233240",
    "gpsLong": "15.029300",
    "addedBy": "internIITD",
    "addedOn": "2012-06-29 11:08:28",
    "updatedOn": "2012-06-29 11:08:28"
  }

]

它们不是换行符。我在这里添加了它以使其可读。我这样做是为了将其转换为字符串。:

     BufferedReader in = new BufferedReader(new InputStreamReader(
                                      httpCon.getInputStream()));

              String inputLine;
              StringBuilder sb = new StringBuilder();
              while ((inputLine = in.readLine()) != null) {
                  sb.append(inputLine);
                      System.out.println(inputLine);
               }
              String Result;
              Result=sb.toString();
              System.out.println("result:"+Result);

我想提取符合特定要求的节点的经度和纬度。我在NetBeans 7.1.2中工作。我是JAVA的新手。 所以,任何人都可以告诉我们有没有办法提取这个纬度和longitde信息并将其存储在整数变量中。 我曾经声明JSONObject,但它在这里不起作用。我不知道为什么?我无法在我的代码中使用JSONArray或JSONObect。它告诉我一个错误。在我这样做的类中没有邮件功能。这个类即文件已被其他一些.java文件调用。我的应用程序中有多个窗口。 请帮忙。

2 个答案:

答案 0 :(得分:1)

这将是一个解决方案:

String jsonSource = /* your json string */;
JSONArray array = new JSONArray(jsonSource);
for (int i = 0; i < array.length(); i++) {
    JSONObject firstObject = (JSONObject) array.get(i);
    System.out.println("Lat is:  " + firstObject.getDouble("gpsLat"));
    System.out.println("Long is: " + firstObject.getDouble("gpsLong"));
}

这将打印:

Lat is:  8.23324
Long is: 15.0293

答案 1 :(得分:0)

该字符串中最外面的字符是方括号,所以你没有处理JSON对象,你有一个JSON数组。

你说你在其他情况下使用了JSONObjectJSONObject用于对象(以{开头)。由于这里有一个数组,你想改用JSONArray

从此字符串创建JSONArray后,在其上调用getJSONObject(0)将为数组的第一个元素(实际上包含示例中的数据)提供JSONObject已发布)。假设您发布的结构,您需要执行以下操作:

JSONArray outerArray = new JSONArray(Result);
JSONObject nodeObject = outerArray.getJSONObject(0);

之后,您可以像nodeObject一样使用JSONObject