【问题标题】:Parsing Array from a website using JSON in Android在 Android 中使用 JSON 从网站解析数组
【发布时间】:2025-12-11 00:45:01
【问题描述】:

我想从下面给出的数据中解析一个特定的数组,特别是 Solar:

{
  "Month":
        {"1":"January",
         "2":"February",
         "3":"March",
         "4":"April",
         "5":"May",
         "6":"June",
         "7":"July",
         "8":"August",
         "9":"September",
         "10":"October",
         "11":"November",
         "12":"December"},
  "Air":
        {"1":"26.6",
         "2":"26.9",
         "3":"27.2",
         "4":"27.6",
         "5":"27.6",
         "6":"27.1",
         "7":"26.7",
         "8":"26.5",
         "9":"26.5",
         "10":"26.8",
         "11":"26.7",
         "12":"26.4"},
  "Humid":
        {"1":"79.5%",
         "2":"75.6%",
         "3":"75.8%",
         "4":"75.9%",
         "5":"77.5%",
         "6":"78.2%",
         "7":"79.0%",
         "8":"81.5%",
         "9":"80.5%",
         "10":"77.2%",
         "11":"76.7%",
         "12":"79.7%"},
  "Solar":
        {"1":"5.87",
         "2":"6.51",
         "3":"6.77",
         "4":"6.42",
         "5":"5.51",
         "6":"4.86",
         "7":"4.95",
         "8":"5.09",
         "9":"5.92",
         "10":"6.22",
         "11":"6.12",
         "12":"5.82"},
  "Atm":
        {"1":"101.1",
         "2":"101.1",
         "3":"101.1",
         "4":"101.0",
         "5":"101.0",
         "6":"101.0",
         "7":"101.1",
         "8":"101.1",
         "9":"101.2",
         "10":"101.2",
         "11":"101.2",
         "12":"101.2"},
  "Wind":
        {"1":"3.7",
         "2":"3.9",
         "3":"3.0",
         "4":"2.9",
         "5":"3.7",
         "6":"4.0",
         "7":"3.5",
         "8":"3.7",
         "9":"3.0",
         "10":"3.7",
         "11":"3.9",
         "12":"3.4"},
  "Earth":
        {"1":"28.5",
         "2":"28.6",
         "3":"29.3",
         "4":"30.0",
         "5":"29.9",
         "6":"29.5",
         "7":"29.3",
         "8":"29.0",
         "9":"29.1",
         "10":"28.9",
         "11":"28.5",
         "12":"28.4"},
  "HDD":
        {"1":"0",
         "2":"0",
         "3":"0",
         "4":"0",
         "5":"0",
         "6":"0",
         "7":"0",
         "8":"0",
         "9":"0",
         "10":"0",
         "11":"0",
         "12":"0"},
  "CDD":
        {"1":"514",
         "2":"477",
         "3":"532",
         "4":"529",
         "5":"545",
         "6":"511",
         "7":"516",
         "8":"509",
         "9":"495",
         "10":"519",
         "11":"502",
         "12":"509"}
}

我正在尝试了解如何使用不同的教程来做到这一点,但我似乎无法继续前进。我只需要提取 JSONArray 并将其转换为 String 数组并将这些值存储到变量中。现在,我能够做到这一点:

public JSONObject solardata() throws ClientProtocolException, IOException, JSONException {
    StringBuilder sb = new StringBuilder(URL);
    HttpGet get = new HttpGet(sb.toString());
    HttpResponse r = client.execute(get);
    int status = r.getStatusLine().getStatusCode();
    if (status == 200) {
        HttpEntity e = r.getEntity();

之后我该怎么办?如何获取JSONArray

【问题讨论】:

    标签: android arrays json


    【解决方案1】:
    1. Google 是您的朋友。提问前请先搜索。对“android httpget json”的简单搜索将为您提供大量示例。 Here's 第一个完全符合您要求的点击。
    2. 您的 JSON 中没有数组。它只是一个带有键和值的普通 JSON 对象。

    【讨论】:

    • 那么告诉我如何提取键“Solar”及其值?
    • 我学习了很多教程,但我总是卡住,因为我没有 JSON 的基本概念。如果有人可以帮助我,我将非常感谢他/她。
    【解决方案2】:

    嗯,一个 JSON 数组应该是这样的。-

    {
        results:[
            elem1,
            elem2,
            ...
        ]
    }
    

    因此,首先,您必须确保以您期望的形式获得 JSON。一旦你有一个带有有效 JSON 数组的 String,你就可以用这样的东西来检索它。-

    JSONObject jsonObj = new JSONObject(jsonString);
    JSONArray jsonArray = jsonObj.getJSONArray("results");
    
    for(int i = 0; i < jsonArray.length(); i ++) {
        JSONObject obj = jsonArray.getJSONObject(i);
        // Do whatever you need with obj
    }
    

    你可以找到一堆很好的教程,以this one为例。

    【讨论】:

      【解决方案3】:

      你可以这样做:

         try {
                      HttpClient httpclient = new DefaultHttpClient();
                      HttpGet httpget = new HttpGet(url);
                      HttpResponse response = httpclient.execute(httpget);
                      HttpEntity entity = response.getEntity();
                      is = entity.getContent();
                      statusCode = response.getStatusLine().getStatusCode();
      
                  } catch (Exception e) {
                      statusCode = -1;
                      Log.e("log_tag", "Erro http " + e.toString());
                  }
      if (statusCode == 200) {
      
                  try {
                      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                      StringBuilder sb = new StringBuilder();
                      String line = null;
                      while ((line = reader.readLine()) != null) {
                          sb.append(line + "\n");
                      }
                      is.close();
                      result = sb.toString();
                  } catch (Exception e) {
                      Log.e("log_tag", "Erro conversão " + e.toString());
                  }
      
                  try {
                  JSONObject json = new JSONObject(result);
                  JSONArray monthsJSON = json.getJSONArray("Months");
                  ArrayList<HashMap<String, String>> monthsList = new ArrayList<HashMap<String,String>>();
                  for (int i = 0; i < monthsJSON.length(); i++) {
                      JSONObject object = (JSONObject) monthsJSON.get(i);
                      HashMap<String, String> data = new HashMap<String, String>();
                      String index = String.valueOf(i+1);
                      data.put(index, object.getString(index));
                      monthsList.add(data);
                  }
      
              } catch (JSONException e) {
                      Log.e("log_tag", "Erro dados " + e.toString());
                  }
              }
      

      【讨论】:

      • 除了 Month 不是数组。您必须将其作为 JSONObject 获取,然后遍历键。
      • 我知道 Month 不是一个数组,但我怎样才能将它作为 JSONObject 获取并进行迭代?
      【解决方案4】:

      这是我的简单 JSON。

      yourJson :
      [
       {"id":"1","name":"Jhohannes H Purba","address":"Kabanjahe"},
       {"id":"2","name":"Berkat Junaidi Banurea","address":"Sidikalang"},
       {"id":"3","name":"Totok BluesMan Silalahi","address":"Medan"}
      ]
      

      对于插入字段到数组,我使用这个

                  JSONArray arrayJson = new JSONArray(yourJson);
      
                  for (int i = 0; i < arrayLagu.length(); i++) {    
                      JSONObject jsonChildNode = arrayLagu.getJSONObject(i);
                      int id = jsonChildNode.optInt("id");
                      String name = jsonChildNode.optString("name");
                      String address = jsonChildNode.optString("address");
      
                      arrayId.add(i, id);
                      arrayJudul.add(i, name);
                      arrayLirik.add(i, address);
                  }
      

      【讨论】: