【问题标题】:JSON parsing not working as expected in JavaJSON 解析在 Java 中无法按预期工作
【发布时间】:2011-05-12 20:20:01
【问题描述】:

我之前已经完成了 JSON 解析,但这个对我不起作用。我不知道为什么。这是一个非常简单的结构,但我无法修复它。

这是我从我的 URL 得到的响应。

{
    "BalanceItems" : [{
            "BalanceItem" : {
                "BalanceType" : "General Cash",
                "Description" : "Prepay Credit",
                "ShortDescription" : "Your bal is $",
                "Value" : 187.95,
                "Unit" : "$NZ",
                "ExpiryValue" : "",
                "ExpiryDate" : "18\/02\/2012"
            }
        }, {
            "BalanceItem" : {
                "BalanceType" : "Me 2 U",
                "Description" : "Me2U Credit",
                "ShortDescription" : "Your bal is $",
                "Value" : 176.86,
                "Unit" : "$NZ",
                "ExpiryValue" : "176.86",
                "ExpiryDate" : "12\/06\/2011"
            }
        }, {
            "BalanceItem" : {
                "BalanceType" : "Rate Plan Recharge Reward",
                "Description" : "Your 'top up and get' special rates",
                "ShortDescription" : "Your 'top up and get' rates are yours until",
                "Value" : ""
            }
        }
    ]
}

这是我的代码

try{

            URL url = new URL("myurl");         
            URLConnection connection = url.openConnection();   

            String line;   
            StringBuilder builder = new StringBuilder();   
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

           while((line = reader.readLine()) != null) {    
               builder.append(line);   
           }   

           String response = builder.toString();   

           JSONObject jar = new JSONObject(response);
           Log.e("Object Size","Object Size  "+ jar.length());
           // Here i should get the size of object as 3 because i have three object of type "BalanceItem"

        }
        catch (Exception e) {
            // TODO: handle exception
        }

【问题讨论】:

  • 发布您的 Logcat、错误、代码,然后人们会尽力帮助您。
  • 解析 JSON 的代码是什么样的?
  • 其实jar.length()是1。它只包含BalanceItems数组。 JSONArray BalanceItems 长度应为 3。
  • 如果我没记错的话 BalanceItems 是一个数组,而 BalanceItem 是对象。那么如何获取 BalanceItem 对象并获取其值。
  • Sujit,请用您的代码编辑您的问题。

标签: android json parsing


【解决方案1】:

您有一个包含 JSONArray 的 JSON 对象。您需要获取 JSONArray:

JSONArray array = jar.getJSONArray("BalanceItems");
Log.e("Object Size","array Size  "+ array.length());

在此处查看 API:

http://www.json.org/javadoc/org/json/JSONObject.html#getJSONArray%28java.lang.String%29

http://www.json.org/javadoc/org/json/JSONArray.html


附录:

该数组又包含几个 JSONObject。您需要遍历它并获取每一个:

for (int i=0; i<array.length(); i++) {
  JSONObject obj = array.getJSONObject(i);
  Log.d ("Balance "+i, obj.getString("Value") + " " + obj.getString("Unit")); 
}

你明白了。在这里输入我的头顶,所以要小心拼写错误。

【讨论】:

  • 嗨 Aleadam,感谢您的回复,但我怎样才能获取 BalanceItem 中的所有值,例如 BalanceType、Description 等。
  • 每个 BalanceItem 本身就是一个 JSON 对象。我会在答案中添加更多细节
  • 请帮帮我:描述它是如何不工作的,所以我明白需要修复什么。首先,告诉我你对jar.toString()有什么好处
  • 阿利达姆。我在您的代码下方添加了我的代码,还添加了我正在使用的 URL。我需要解析所有值。我不知道为什么它不起作用.....
  • 告诉我Log.d ("test", response);(在String response = builder.toString();之后)和Log.d ("test2", jar.toString());(在JSONObject jar = new JSONObject(response);之后)的输出
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2023-03-24
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多