简体   繁体   中英

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

I want to parse this object from a JSON Array:

{..."avg": 8.492619161922457352960767294, "symbol": "mtgoxUSD", "low": 8.391000000000}

The JSONArray is dynamic, so sometimes it is the 73rd, 74th, or 75th object in the array and none of the objects in the array have names. I am currently using this code to parse it. It works fine when my particular object is in the 75th position, but crashes when it is not.

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());
 }       

is it possible for me to identify the object by it's attributes, since the objects in the array have no names? How can i resolve this issue? Thank you in advance.


Edit:

This somewhat works, but only returns the values from the last object in the array. How do I handle this so that i can parse my particular object, and not just the last one? ...

 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());
}

This the way that I parse the JSON in an android application :

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());
}

I also want to add that I use HTTP Client library to fetch the data from server. To have more information about how to use HTTP Client, check my answer in this link: HTTP Client

Is the "75" going to be dynamic as well? Meaning, will the number changed based on user input? If so, you'll need to have a handle for that but anyway, just use a for loop, something like the following:

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());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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