0

以下は、Google API 経由でクエリを投稿しようとしているテスト コードです。API は、json 解析可能な文字列で応答を送信する必要があります。文字列を印刷すると、url などのエンティティがはっきりと表示されますが、JSON オブジェクトからこれらのエンティティを取得しようとすると、エラーが発生します。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import org.json.JSONObject;



public class test {

    public static void main (String[] args) {

        try {
            // The request also includes the userip parameter which provides the end
            // user's IP address. Doing so will help distinguish this legitimate
            // server-side traffic from traffic which doesn't come from an end-user.
            URL url = new URL(
                    "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=lahore");
            URLConnection connection = url.openConnection();


            String line;
            StringBuilder builder = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            while((line = reader.readLine()) != null) {
                builder.append(line);
                System.out.println(line);

            }

            JSONObject jsonObject = new JSONObject(builder.toString());
            System.out.println(jsonObject);

            String url1 = (String) jsonObject.get("url");
            System.out.println(url1);


        } catch(Exception e) {
            e.printStackTrace();
        }

    }

}

次の例外がスローされます。

org.json.JSONException: JSONObject["url"] not found.
    at org.json.JSONObject.get(JSONObject.java:459)
    at org.json.JSONObject.getJSONArray(JSONObject.java:540)
    at test.main(test.java:37)

どんな助けでも大歓迎です。

4

1 に答える 1

1

json 文字列を調べた後:

「url」を直接取得することはできません。「url」を取得するには、ストリームを StringBuilder に読み込んだ後、以下で行う必要があります。

JSONObject jsonObject = new JSONObject(builder.toString());
JSONObject responseData = (JSONObject)jsonObject.get("responseData");
JSONArray results = (JSONArray)responseData.get("results");
for(int i = 0; i < results.length(); i++)
{
     JSONObject urlObject  = (JSONObject)results.get(i);
     System.out.println(urlObject.get("url"));
}
于 2013-11-12T01:29:19.850 に答える