2013-03-22 3 views
0

Привет Я пытаюсь прочитать JSON из ReST API, но Im получает исключение nullpointer, потому что 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, что и пользователь input_ <- что это значит? –

+0

Если пользователь выбирает местоположение, он должен найти это местоположение из файла JSON – Josef

ответ

0

Я думаю, что вы спрашиваете, как разобрать ваш JSONObject и получить соответствующие значения из него, что пользователь заинтересован. Ниже приведен пример того, как можно растащить JSONObject создать Map, ключ является String id (поскольку имя не кажется уникальным) и значением которого является целое JSONObject. Вы можете использовать эту карту для поиска ввода от пользователя и найти подходящий ЛЛП, если это то, что вы заинтересованы в.

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

Вы можете адаптировать этот метод, как вы считаете нужным. Например, если вас интересует связь между id и name, вы можете создать аналогичный метод, который использует эти значения вместо id и всего JSONObject'. Я надеюсь, что это поможет ~

Смежные вопросы