簡體   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