2013-03-22 109 views
0

嗨我想从ReST API读取JSON,但我得到一个空指针异常,因为mycode不正确。如何获取特定的JSON数据?

我有一个JSON,我从这样看阅读:

processJSON({ 
"LocationList":{ 
    "noNamespaceSchemaLocation":"http://api.vasttrafik.se/v1/hafasRestLocation.xsd", 
    "servertime":"16:13", 
    "serverdate":"2013-03-22", 
    "StopLocation":[{ 
    "name":"Brunnsparken, Göteborg", 
    "lon":"11.967824", 
    "lat":"57.706944", 
    "id":"9021014001760000", 
    "idx":"1" 
    },{ 
    "name":"Brunnsgatan, Göteborg", 
    "lon":"11.959455", 
    "lat":"57.693766", 
    "id":"9021014001745000", 
    "idx":"4" 
    },{ 
    "name":"Brunnslyckan, Lerum", 
    "lon":"12.410219", 
    "lat":"57.812073", 
    "id":"9021014017260000", 
    "idx":"5" 
    }, 

现在我这取决于用户输入想要的名字从JSON文件。

我该如何做到这一点与代码?

我的代码,错误的是这样的:

import org.json.simple.JSONObject; 
import org.json.simple.JSONValue; 

    public class JSONReader { 

     private String jsonData = ""; 


     public String getJsonData(String location){ 


      try { 

        URL url = new  URL("http://api.vasttrafik.se/bin/rest.exe/v1/location.name?authKey=secret&format=json&jsonpCallback=processJSON&input=" + URLEncoder.encode(location, "UTF-8")); 
        URLConnection connection = url.openConnection(); 
        BufferedReader readJsonFile = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); 
        String temp = ""; 
        while((temp = readJsonFile.readLine()) != null){ 
          jsonData += temp; 
        } 
        readJsonFile.close(); 

        System.out.println(jsonData); 
        return jsonData; 

      } 

      catch (IOException e) { 

      } 
      return null; 
    } 

     public void JSONParsing(){ 

       String location = Planner.getPlanner().getStartingLocation(); 
       JSONObject obj =(JSONObject)JSONValue.parse(getJsonData(location)); 

       //Set the text into the JList 

       if (obj.containsValue(location)); 
       obj.get("name"); 
       } 
    } 

我想从JSON获得位置的同名出的用户输入。 如何使用代码执行此操作?

+0

_I想要从用户输入中获取与JSON相同的位置名称_ < - 这是什么意思? – 2013-03-22 15:52:16

+0

如果用户选择一个位置,它应该从JSON文件中找到该位置 – Josef 2013-03-22 16:35:21

回答

0

我认为你是问如何解析您的JSONObject,并获得相应的值了它的用户有兴趣,下面是创建一个Map,其关键是你如何拉开JSONObject为例String id(因为名称看起来不是唯一的),其值是整个JSONObject。您可以使用该地图来查找来自用户的输入,并找到合适的LLA如果这就是你所感兴趣的东西。

public Map<String, JSONObject> createLocationMap(JSONObject jsonObj){ 
    Map<String, JSONObject> nameToLocationMap = new HashMap<String, JSONObject>(); 
    JSONObject locationList = (JSONObject) jsonObj.get("LocationList"); 
    JSONArray array = (JSONArray) locationList.get("StopLocation"); 
    for (int i = 0; i < array.length(); i++) { 
     String name = (String) ((JSONObject) array.get(i)).get("id"); 
     nameToLocationMap.put(name, ((JSONObject)array.get(i))); 
    } 
    return nameToLocationMap; 
} 

,你认为合适,您可以定制此方法。例如,如果您对idname之间的关系感兴趣,那么您可以创建一个类似的方法,使用这些值而不是id和整个JSONObject'。我希望这有助于〜