2013-10-25 30 views
-1

我面臨着一些問題,同時解析JSON值,請找到下面的JSON文件,無法解析JSON值的Android

{ 
     "Account": "xxx", 
     "Account_desc": "xxx", 
     "TimeZone": "GMT+05:30", 
     "DeviceList": [ 
      { 
      "Device": "xttt", 
      "Device_desc": "txtx", 
      "EventData": [ 
       { 
        "Device": "xttt", 
        "Timestamp": 1373539125, 
        "Timestamp_date": "2013/07/11", 
        "Timestamp_time": "16:08:45", 
        "StatusCode": 61715, 
        "StatusCode_hex": "0xF113", 
        "StatusCode_desc": "Stop", 
        "GPSPoint": "12.97887,77.51030", 
        "GPSPoint_lat": 12.97887, 
        "GPSPoint_lon": 77.51030, 
        "Speed": 0.0, 
        "Speed_units": "km/h", 
        "Odometer": 3.416, 
        "Odometer_units": "Km", 
        "Geozone": "zone4", 
        "Geozone_index": 0, 
        "Address": "cxcxc", 
        "DigitalInputMask": 251, 
        "DigitalInputMask_hex": "0xFB", 
        "Index": 0 
       } 
      ] 
      }, 
      { 
      "Device": "pppp", 
      "Device_desc": "statstr", 
      "EventData": [ 
       { 
        "Device": "pppp", 
        "Timestamp": 1368870217, 
        "Timestamp_date": "2013/05/18", 
        "Timestamp_time": "15:13:37", 
        "StatusCode": 61715, 
        "StatusCode_hex": "0xF113", 
        "StatusCode_desc": "Stop", 
        "GPSPoint": "14.26281,80.11421", 
        "GPSPoint_lat": 14.26281, 
        "GPSPoint_lon": 80.11421, 
        "Speed": 0.0, 
        "Speed_units": "km/h", 
        "Odometer": 373.874, 
        "Odometer_units": "Km", 
        "Geozone": "port", 
        "Geozone_index": 0, 
        "Address": "asdfsdfss", 
        "Index": 0 
       } 
      ] 
      } 
     ] 
    } 

從上面的JSON,我想有隻「GPSPoint_lat」,」 GPSPoint_lon」和‘’中‘EVENTDATA’所以我做了編碼如下設備,

JSONObject jsonObject = ApplicationContext.getHttpService() 
        .readAsJson(s); 
      // System.out.println("indexvalue:"+s.indexOf(1,5)); 
      // JSONObject object = jsonObject.getJSONObject("DeviceList"); 
      JSONArray jsonArray = jsonObject.getJSONArray("DeviceList"); 

      JSONObject object = jsonArray.getJSONObject(0); 

      JSONArray secondarray = object.getJSONArray("EventData"); 

for (int i = 0; i < secondarray.length(); i++) { 
       try { 
        System.out.println("Im..."); 
        // System.out.println("Latitude:"+ ((JSONObject) 
        // jsonArray.get(i)).getString("GPSPoint_lat")); 
        // String id = ((JSONObject) 
        // jsonArray.get(i)).getString("deviceID"); 
        // arr = (JSONArray) jsonArray.get(i); 
        JSONObject obj = secondarray.getJSONObject(i); 
        String lat = obj.getString("GPSPoint_lat"); 
        String lon = obj.getString("GPSPoint_lon"); 

........//.. 
...///......}} 

但問題在上面的代碼是每當我執行我收到arraylength爲1,即只得到我的意思是第一個Eventdata值。我需要的是我想獲得所有「Eventdata」值。請就此提出建議。

問候 普里亞

回答

0

試試這個..

JSONArray jsonArray = jsonObject.getJSONArray("DeviceList"); 

for (int j = 0; j < jsonArray.length(); j++) { 

      JSONObject object = jsonArray.getJSONObject(j); 

      JSONArray secondarray = object.getJSONArray("EventData"); 

for (int i = 0; i < secondarray.length(); i++) { 

        System.out.println("Im..."); 
        // System.out.println("Latitude:"+ ((JSONObject) 
        // jsonArray.get(i)).getString("GPSPoint_lat")); 
        // String id = ((JSONObject) 
        // jsonArray.get(i)).getString("deviceID"); 
        // arr = (JSONArray) jsonArray.get(i); 
        JSONObject obj = secondarray.getJSONObject(i); 
        String lat = obj.getString("GPSPoint_lat"); 
        String lon = obj.getString("GPSPoint_lon"); 


} 
} 
+0

非常感謝你...你在晃動 – user2918730

+0

@ user2918730歡迎並接受我的回答.. – Hariharan

-1

你已經失蹤 「」 在你的JSON數據。所有的數字都應該有「」,像解析之前一樣,它被視爲字符串。

+0

嗨,兄弟..我剛剛發佈了JSON的一部分..所以不用擔心這一點。 – user2918730

1
JSONObject object = jsonArray.getJSONObject(0); 

我在這一點猜測在上面的代碼中你只是這是由「0」指定的第一個索引處獲取數據。因此,你也可以把它看作一個整體。嘗試使用索引在循環內執行object.getJSONArray()。也許這會幫助你獲得「EventData」中的所有數據。希望這有助於:)

0

對於JSON解析使用下面的類。

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONObject; 

public class JSONParser { 

    public JSONParser() { 

    } 

    JSONObject jObj; 
    String json; 
    InputStream is = null; 

    public JSONObject getJsonFromUrl(String url) { 
     // TODO Auto-generated method stub 

     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 

      is = httpEntity.getContent(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     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(); 
      json = sb.toString(); 

      System.out.println("Json String : " + json); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     try { 
      jObj = new JSONObject(json); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return jObj; 
    } 
} 

並在您的MainActivity中使用以下代碼來解析它。

JSONParser parser = new JSONParser(); 
JSONObject o = parser.getJsonFromUrl("yourjsonurl"); 

String Account = o.getString("Account"); 
String Account_desc = o.getString("Account_desc"); 

JSONArray array = o.getJSONArray("DeviceList"); 
JSONObject o1 = array.getJSONObject(0); 
String Device = o1.getString("Device"); 

//Again you have JSONArray 
JSONArray a = o1.getJSONArray("EventData"); 

//Then get object form array at index 0. 

JSONObject obj = a.getJSONObject(0); 

然後從這個json對象中獲取數據。

0

在你的JSON中的問題是,在eventData數組中你有1個JSON對象,有很多映射,而不是分配jsonObjects。如果您wannt EVENTDATA是一個JSONArray所有

.."Geozone": "zone4", 
        "Geozone_index": 0, 
        "Address": "cxcxc", 
        "DigitalInputMask": 251, 
        "DigitalInputMask_hex": "0xFB", 
        "Index": 0... 

爲JSONObject的需要喲改變JSON是作爲數組

..{"Geozone": "zone4"}, 
        {"Geozone_index": 0}, 
        {"Address": "cxcxc"}, 
        {"DigitalInputMask": 251}, 
        {"DigitalInputMask_hex": "0xFB"}, 
        { "Index": 0} 
... 
0
JSONArray DeviceListArray = jsonObject.getJSONArray("DeviceList"); 


for (int i = 0; i < DeviceListArray.length(); i++) { 

      JSONObject Deviceobject = DeviceListArray.getJSONObject(i); 


      JSONArray EventDataArray = Deviceobject.getJSONArray("EventData"); 

for (int j= 0; j < EventDataArray.length(); j++) { 


        JSONObject valueObj = EventDataArray.getJSONObject(j); 
        String GPSPoint_lat = valueObj.getString("GPSPoint_lat"); 
        String GPSPoint_lon = valueObj.getString("GPSPoint_lon"); 
        String Device = valueObj.getString("Device"); 
    // Store this three values in ArrayList 
} 
} 

} 
+0

感謝兄弟...現在工作... – user2918730

0

普里亞,你的JSON包含三個對象和兩個數組如下

對象 1.整個響應 2. DEVICELIST 3. EVENTDATA

陣列

  1. 設備列表 - 設備保持
  2. 事件數據的陣列 - 事件
  3. 的陣列

現在仔細看看你的JSON,即JSON包含設備的N多,但每個設備都有一個事件,所以你必須迭代DeviceList,然後迭代事件列表。

這樣迭代應該如下。

JSONObject jsonObject = ApplicationContext.getHttpService().readAsJson(s); 

JSONArray jsonDeviceListArray = jsonObject.getJSONArray("DeviceList"); 
int deviceCount = jsonDeviceListArray.length(); 

JSONObject jsonDeviceObj; 
JSONArray jsonEventList; 
for (int deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++) { 
    jsonDeviceObj = jsonDeviceListArray.getJSONObject(deviceIndex); 
    //Here you can print device, device_desc from jsonDeviceObj 

    jsonEventList = jsonDeviceObj.getJSONArray("EventData"); 
    int eventCount = jsonEventList.length(); 

    JSONObject jsonEventObj; 
    for (int eventIndex = 0; eventIndex < eventCount; eventIndex++) { 
     jsonEventObj = jsonEventList.getJSONObject(eventIndex); 
     //Here you can print event info. 
    } 
} 
+0

謝謝..它的工作原理 – user2918730