我如何从JSON中获取特定值?

时间:2016-07-20 06:10:06

标签: android json

我试图从JSON文件中的字段中获取特定值。这是我第一次使用JSON文件,所以我不确定我是否正确使用它。

try {
    URL url = new URL(API_URL + city +".json");
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }

    bufferedReader.close();
    return stringBuilder.toString();
}

此块将从天气网站获取JSON,然后将JSON作为字符串返回。然后在下面使用该字符串。不幸的是,每当我在Android Studio中运行此应用程序并浏览日志时,日志会不断地说weather中没有值。

protected void onPostExecute(String response) {
    if(response == null) {
        response = "THERE WAS AN ERROR";
    }

    progressBar.setVisibility(View.GONE);
    Log.i("INFO", response);
    responseView.setText(response);

    // TODO: check this.exception
    // TODO: do something with the feed

    try {
        JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
        String weather = object.getString("weather");
        Toast.makeText(MyActivity.this, "There is rain", Toast.LENGTH_SHORT).show();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

我尝试做的是从weather部分获取信息

Here是我尝试解析的JSON链接。这个文本框认为JSON响应中有太多链接供我在这里发布。我试图找出正在发生的事情,我们将非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

您可以打印response以查看它是否完全是您的JSON。

假设您正确获取了JSON字符串。

JSONObject object = new JSONObject(response);
String weather = object.getString("weather");

但是,如果您获得的JSON完全是您的response,则上述代码不起作用,因为没有weather字符串。根只包含responsecurrent_observation

如果您在weather下获得的内容为current_observation,则应使用以下代码。

JSONObject object = new JSONObject(response);
JSONObject current_obs = object.getJSONObject("current_observation");
String weather = current_obs.getString("weather"); // Clear

答案 1 :(得分:1)

JSONObject object = (JSONObject) new JsonObject(responseString);
String weather = object.getString("weather");

答案 2 :(得分:0)

我有一个使用开放天气地图api完成的天气应用示例。这就是你要求的全部。

此处的代码: http://opensourceandroid.in/weather_forecast.html

答案 3 :(得分:0)

首先,您需要以字符串形式获取响应。 现在,根据响应启动json解析。 要么 您也可以使用Gson类进行json解析。

从JSONObject获取json值:

JSONObject object = new JsonObject(response);
String weather= object.getString("weather");

用于解析JSONObject的代码片段。

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

从JSONArray获取json值:

JSONArray jsonarray = new JSONArray(response);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}

用于解析JsonArray的代码片段。

AsyncTask

希望它会帮助你。