我在解析JSON值时遇到了一些问题,请在下面找到JSON文件,
{
"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中,我想在“ EventData ”中只有“GPSPoint_lat”,“GPSPoint_lon”和“Device”,所以我做了如下编码,
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 :(得分:1)
JSONObject object = jsonArray.getJSONObject(0);
我在上面的代码中猜测你只是在第一个由'0'指定的索引处获取数据。因此,您也可以获得长度。尝试使用索引在循环内执行 object.getJSONArray()。也许这将帮助您获取“EventData”中的所有数据。希望这会有所帮助:)
答案 1 :(得分: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");
}
}
答案 2 :(得分: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对象获取数据。
答案 3 :(得分:0)
您的JSON中的问题是,在eventData数组中,您有1个JSON对象,其中包含大量映射而不是jsonObjects。如果你想让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}
...
答案 4 :(得分: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
}
}
}
答案 5 :(得分:0)
Priya,你的json包含三个对象和两个数组,如下所示
物件 1.整个回复 2. DeviceList 3. EventData
阵列
现在仔细查看你的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.
}
}
答案 6 :(得分:-1)
您的json数据中缺少“”。所有数字都应该为“”,因为在解析之前它被视为字符串。