【问题标题】:Parsing nested JSON in ANDROID [closed]在 ANDROID 中解析嵌套的 JSON [关闭]
【发布时间】:2013-12-15 21:28:13
【问题描述】:

我正在尝试解析这个结构:(它让我发疯,我尝试了我能想到的一切。但是我不是很有经验)

{
    "topDrops" : {
        "week" : "14",
        "player" : [ {
            "percent" : "3.70",
            "id" : "10948"
        }, {
            "percent" : "3.49",
            "id" : "0532"
        }, {
            "percent" : "2.46",
            "id" : "11214"
        }, {
            "percent" : "2.20",
            "id" : "0529"
        }, {
            "percent" : "2.04",
            "id" : "0508"
        } ]
    },
    "version" : "1.0",
    "encoding" : "ISO-8859-1" 
}

“topDrop”就像一个文件名? player 是一个 JSONArray,由 5 个播放器 JSONObjects 组成。但是在 JSON 术语中,什么是最重要的。我在 JSON 验证器上检查有效,我需要类似的东西:

topDrop 作为 JSONObject 播放器为 JSONArray 并循环遍历数组中的对象。

有什么建议吗? /约翰

【问题讨论】:

  • 你有一些关于你目前取得的成就的代码吗?
  • 我会尽量把它弄干净。我已经改过很多次了,现在一团糟。
  • a/ 解析 json。 b/ topDrops 是一个由其名称引用的 jsonobject。 c/ 在这个 jsonobject 中, player 是一个 jsonarray,也被它的名字引用。 d/ 在这个数组中,有几个jsonobjects。 e/ 将 jsonobjects 视为映射或关联数组。
  • 是的,这是真的。我现在开始工作了。我想我陷入了循环,失去了对事物的追踪。非常感谢大家的意见。

标签: android json parsing


【解决方案1】:

这是我从 URL 解析 json 的代码:

public JSONObject getJSONFromUrl(String url) {
try {
    // defaultHttpClient
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    HttpResponse httpResponse = httpClient.execute(httpPost);
    HttpEntity httpEntity = httpResponse.getEntity();
    json = EntityUtils.toString(httpEntity);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
JSONObject jObj;
// try parse the string to a JSON object
try {
    jObj = new JSONObject(json);
} catch (JSONException e) {
    Log.e("JSON Parser", "Error parsing data " + e.toString());
}
Log.v("debug", "JSON ready to parsing");
return jObj;
}

public void parsingData(JSONObject json) {
try {
    JSONArray data = json.getJSONArray("data");
    for (int i = 0; i < data.length(); i++) {
        // Do your stuff, example :
        JSONObject c = data.getJSONObject(i);
        JSONObject topDrops = c.getJSONObject("topDrops");
        JSONArray playerArray = topDrops.getJSONArray("player");
        // playerArray.getJSONObject(0) == first player
    }
} catch (JSONException e) {
    e.printStackTrace();
    Log.v("debug", "Error during the connection HTTP");
    cancel(Boolean.TRUE);
}
}

【讨论】:

  • 看起来和我用过的差不多,除了我使用 AsyncHttpClient 来获取数据。这适用于具有 1 个包含许多对象的数组的“简单”JSON。它是问题的“顶级”对象。我似乎无法在一个对象或 2 个对象的“下方”得到一个数组。这些方法不支持。
  • 你试过 JSONObject c = data.getJSONObject(i); mySecondArray = c.getJSONArray("玩家"); ?我编辑了我的答案
  • 但是不是对象的“{-symbol”和指示以及数组的“[”指示吗?应该是对象数组对象吧?
  • 我现在可以使用它了。我想我陷入了循环,失去了对事物的追踪。非常感谢大家的意见。
  • 我编辑了我的代码以使用您的示例。欢迎您投票并验证它是否对您有帮助:)
【解决方案2】:

您可以使用一个名为 JSONSimple 的 Java 库来为您完成这项工作。link

【讨论】:

  • 现在检查一下。
【解决方案3】:

我总是使用 Google 的 Gson 库:https://code.google.com/p/google-gson/ 为了生成 POJO,我使用了这样的在线实用程序 http://www.jsonschema2pojo.org/http://jsongen.byingtondesign.com/。之后,只需编写一行来生成或解析任何 json。我从未手动解析过 json。

【讨论】:

    【解决方案4】:

    这里基本上有一个对象,其中包含一个名为topDrops 的对象,其中有一个名为week 的字符串和一个名为player 的数组。该数组中的每个对象都包含一个名为percent 的字符串和一个名为id 的字符串。之后,您还有另外两个字符串 versionencoding

    我不会给你写完整的解析方法,但我建议你阅读我写的关于这个主题的这篇博文,从中你可以了解如何用 android 给你的东西和使用@987654329 来解析这个对象@library,有一个项目可以下载和试验。

    JSON Parsing

    【讨论】:

      【解决方案5】:

      希望对你有帮助! :) 这是我的解决方案。

      Integer Week;
      String Version, Encoding;
      ArrayList<Double> Percent;
      ArrayList<Integer> ID;
      
      JSONObject jObject = new JSONObject(...JSON String...);
      JSONObject TopDrops = jObject.getJSONObject("topDrops");
      Week = TopDrops.getInt("week");
      
      JSONArray Player = TopDrops.getJSONArray("player");
      for (int i = 0; i < 5; i++) {
           Percent.add(Player.getJSONObject(i).getDouble("percent"));
           ID.add(Player.getJSONObject(i).getInt("id"));
      }
      Version = TopDrops.getString("version");
      Encoding = TopDrops.getString("encoding");
      

      完整项目下载链接:JSONParseProject

      你能用这个 JSON 发送 url 吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多