0

こんにちは、ReST API から JSON を読み取ろうとしていますが、mycode が正しくないため、nullpointer 例外が発生します。

私はこのように見えるから読んでいる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 から取得したい。コードでこれを行うにはどうすればよいですか?

4

1 に答える 1

0

あなたはあなたのを解析JSONObjectし、ユーザーが興味を持っている対応する値を取得する方法を尋ねJSONObjectMapいると思いStringます.一意であるように見える) であり、その値は全体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;
}

この方法は、必要に応じて調整できます。たとえば、idとの関係に関心がある場合は、 と 全体のname代わりにこれらの値を使用する同様のメソッドを作成できます。これが役立つことを願っています〜idJSONObject'

于 2013-03-22T16:41:10.667 に答える