簡體   English   中英

在Android中解析JSON數據

[英]parse JSON data in Android

我有以下格式的JSON數據,

[
    {
        "name": "France",
        "date_time": "2015-05-17 19:59:00",
        "dewpoint": "17",
        "air_temp": "10.8"
    },
    {
        "name": "England",
        "date_time": "2015-05-17 19:58:48",
        "dewpoint": "13",
        "air_temp": "10.6"
    },
    {
        "name": "Ireland",
        "date_time": "2015-05-17 19:58:50",
        "dewpoint": "15",
        "air_temp": "11.1"
    }
]

我已經為Android應用程序設置了一個Google地圖,因此我在兩個活動(GoogleMaps.java和WeatherInfo.java)之間傳遞了名稱值,現在當我單擊Google Map中的一個點時,它將名稱傳遞給WeatherInfo.java,我想獲取該名稱的天氣數據。

例如:我在地圖上單擊“法國”點,WeatherInfo.class的名稱將為“ France”,並打印出該點的“ date_time,露點,air_temp”。

我的問題是我如何才能僅對我在地圖中單擊的點進行解析的Json數據? 誰能看到我的WeatherInfo.java類中的for循環?

WeatherInfo.java

protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                contacts = jsonObj.getJSONArray("");

                // looping through All Contacts
                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject c = contacts.getJSONObject(i);


                    String name = c.getString(TAG_NAME);
                    String date_time = c.getString(TAG_DATE);
                    String temp = c.getString(TAG_TEMP);
                    String dewpoint = c.getString(TAG_DEWPOINT);

                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_NAME, name);
                    contact.put(TAG_DATE, date_time);
                    contact.put(TAG_TEMP, temp);
                    contact.put(TAG_DEWPOINT, dewpoint);

                    // adding contact to contact list
                    contactList.add(contact);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }
JSONArray array = (JSONArray)new JSONTokener(jsonStr).nextValue();

for(int i = 0; i<array.length(); i++){
    JSONObject jsonObject = array.getJSONObject(i);             
    String name = jsonObject.getString("name");
    String date = jsonObject.getString("date_time");
    ...
}

要么

JSONArray array = (JSONArray)new JSONTokener(jsonStr).nextValue();

for(int i = 0; i<array.length(); i++) {
    JSONObject jsonObject = array.getJSONObject(i);             
    City city = new City();
    city.name = jsonObject.getString("name");        
    ...
}

您可以按以下方式使用Jackson JSON解析器:-

您將需要一個用於點數據的值對象。

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Point {

    private final String name;
    private final String dateTime;
    private final int dewpoint;
    private final double airTemp;

    @JsonCreator
    public Point(@JsonProperty("name") final String name, @JsonProperty("date_time") final String dateTime, @JsonProperty("dewpoint") final int dewpoint, @JsonProperty("air_temp") final double airTemp) {
        this.name = name;
        this.dateTime = dateTime;
        this.dewpoint = dewpoint;
        this.airTemp = airTemp;
    }

    public String getName() {
        return name;
    }

    public String getDateTime() {
        return dateTime;
    }

    public int getDewpoint() {
        return dewpoint;
    }

    public double getAirTemp() {
        return airTemp;
    }

}

然后這個傑克遜對象映射器

// 2. Convert JSON to Java object
ObjectMapper mapper = new ObjectMapper();
Point[] points = mapper.readValue(new File("points.json"), Point[].class);

for (Point point : points) {
    System.out.println("" + point.getName());
    System.out.println("" + point.getDateTime());
    System.out.println("" + point.getDewpoint());
    System.out.println("" + point.getAirTemp());            
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM