繁体   English   中英

如何使用Handler通过JSONObject属性解析动态JSONArray?

[英]how do i parse a dynamic JSONArray by JSONObject attribute with Handler?

我想从JSON数组解析此对象:

{...“ avg”:8.492619161922457352960767294,“ symbol”:“ mtgoxUSD”,“ low”:8.391000000000}

JSONArray是动态的,因此有时它是数组中的第73个,第74个或第75个对象,并且数组中的所有对象都没有名称。 我目前正在使用此代码进行解析。 当我的特定对象位于第75个位置时,它可以正常工作,但当它不在第75个位置时,它会崩溃。

try {
         JSONArray json = JSONfunctions2.getJSONfromURL("http://bitcoincharts.com/t/markets.json");
         JSONObject  forex = json.getJSONObject(75);
         String btc = forex.getString("avg");            
         currencyBTC = Double.parseDouble(btc);  
 }catch(JSONException e)        {
     Log.e("log_tag", "Error parsing data "+e.toString());
 }       

因为数组中的对象没有名称,我是否可以通过属性识别对象? 我该如何解决这个问题? 先感谢您。


编辑:

这在某种程度上是可行的,但仅返回数组中最后一个对象的值。 我该如何处理以便可以解析我的特定对象,而不仅仅是最后一个? ...

 try {
JSONArray jArray = JSONfunctions2.getJSONfromURL("http://bitcoincharts.com/t/markets.json");
String symbol = "mtgoxUSD";
for (int i = 0; i < jArray.length(); i++) {
    JSONObject forex = jArray.getJSONObject(i);
    String mtgoxUSD = forex.getString("symbol");
    if (mtgoxUSD == symbol) {
        String btc = forex.getString("avg");            
        double currencyBTC = Double.parseDouble(btc);
    }
}
} catch (Exception e) {
Log.e("log_tag", "Error parsing data "+ e.toString());
}

我在android应用程序中解析JSON的方式如下:

String s = client.getBaseURI("http://bitcoincharts.com/t/markets.json"); // Json format
JSONArray array = new JSONArray(s);
JSONObject obj;     
for (int i = 0; i < array.length(); i++) {
     obj = (JSONObject) array.get(i);
     double average =Double.parsedouble(obj.get("avg").toString()));
     String symbol = obj.get("symbol").toString();
     double low = Double.parsedouble(obj.get("low").toString());
}

我还想补充一点,我使用HTTP客户端库从服务器获取数据。 要了解有关如何使用HTTP客户端的更多信息,请在以下链接中查看我的答案: HTTP客户端

“ 75”也会动态变化吗? 意思是,数量会根据用户输入而改变吗? 如果是这样,则需要为此设置一个句柄,但无论如何,只需使用for循环,如下所示:

try {
    JSONArray jArray = JSONfunctions2.getJSONfromURL("http://bitcoincharts.com/t/markets.json");
    String symbol = "mtgoxUSD";
    for (int i = 0; i < jArray.length(); i++) {
        JSONObject forex = jArray.getJSONObject(i);
        String mtgoxUSD = forex.getString("symbol");
        if (mtgoxUSD == symbol) {
            String btc = forex.getString("avg");            
            double currencyBTC = Double.parseDouble(btc);
        }
    }
} catch (Exception e) {
    Log.e("log_tag", "Error parsing data "+ e.toString());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM