繁体   English   中英

Android中的JSON解析:在对象内部打开对象

[英]JSON parsing in android: opening objects inside objects

这应该真的很简单,我已经接近弄清楚了,但是我开始失去理智了。 只是试图从api中提取数据

如何从对象(在另一个对象内部)提取JSON数据?

这是我听说过JSON的第一天,因此我第一个承认我对此知之甚少。 谢谢你的时间!

这篇文章: 在android中进行JSON解析:x错误的值没有任何帮助,这使我到达了我现在想要打开“列表”然后进入“ 0”的位置,这样我就可以收集天气数据了。

一直在使用jsonviewer.stack尝试了解这些东西

api网址: http : //api.openweathermap.org/data/2.5/forecast/city? id=4161254&APPID= e661f5bfc93d47b8ed2689f89678a2c9

我的代码:

公共类MainActivity扩展了AppCompatActivity {

TextView citySpot;
TextView cityTemp;

public class DownloadTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {

        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {

            url = new URL(urls[0]);

            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = urlConnection.getInputStream();

            InputStreamReader reader = new InputStreamReader(in);

            int data = reader.read();

            while (data != -1) {

                char current = (char) data;

                result += current;

                data = reader.read();

            }
            return result;

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

    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        try {

            // this works flawlessly and gathers the city name
            JSONObject container = new JSONObject(result);

            JSONObject cityTest = container.getJSONObject("city");

            citySpot.setText(cityTest.getString("name"));

            // this is my failed attempt to get inside of the "list" folder

            JSONObject listList = new JSONObject(result);

            JSONObject listTest = listList.getJSONObject("list");

            JSONObject listTestOne = listTest.getJSONObject("0");

            JSONObject listTestTwo = listTestOne.getJSONObject("main");

            cityTemp.setText(listTestTwo.getString("temp"));
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    citySpot = (TextView) findViewById(R.id.cityName);
    cityTemp = (TextView) findViewById(R.id.textView3);

    DownloadTask task = new DownloadTask();

        task.execute("http://api.openweathermap.org/data/2.5/forecast/city?id=4161254&APPID=e661f5bfc93d47b8ed2689f89678a2c9");


}

}

您可以尝试使用gson库解析响应。 在build.gradle中添加以下内容

compile group: 'com.google.code.gson', name: 'gson', version: '2.3.1'

创建bean以匹配您的响应。 使用字段来匹配json响应中返回的内容。 下面的示例。

public class ResultsResponse {
    private List<MyList> list;
}
public class MyList {
    private String main;
}

如果您希望MyList可以有另一个列表。 最后尝试

GsonBuilder gsonBuilder =  new GsonBuilder();
ResultsResponse response = gsonBuilder.create().fromJson(jsonString, ResultsResponse.class)

response对象应具有您的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM