一、JsonObject遍历
在使用JsonObject进行数据处理的时候,我们经常需要遍历JsonObject来获取其中的数据。下面我们将使用一个简单的Json格式作为示例:
{ "name": "小明", "age": "18", "gender": "男" }
我们可以通过以下方式遍历JsonObject的key:
JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); // 在这里进行业务处理 }
在上面的代码中,我们通过调用JSONObject的keys()方法来获取JsonObject中所有键的迭代器,然后调用迭代器的next()方法逐个遍历JsonObject中的键。
二、JsonObject遍历value
在遍历JsonObject的时候获取value也是很常见的需求。
JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); // 在这里进行业务处理 }
我们可以通过调用JsonObject的get()方法来获取相应键的值。
三、遍历JsonObject内部的JsonObject
在JsonObject内部还可能存在其它的JsonObject,我们需要先获取内部的JsonObject,再对内部JsonObject进行遍历。
{ "name": "小明", "age": "18", "address": { "country": "中国", "province": "广东", "city": "深圳" } }
JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); if(value instanceof JSONObject){ JSONObject innerJsonObject = (JSONObject) value; // 对内部JsonObject进行遍历 } // 在这里进行业务处理 }
在上面的代码中,我们判断该键对应的值是否是JsonObject,如果是则将其转换为JSONObject并进行遍历。
四、JsonArray遍历
在JsonObject内部还经常存在JsonArray,我们需要对JsonArray进行遍历。
{ "name": "小明", "hobbies": ["篮球", "足球", "游泳"] }
JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); if(value instanceof JSONArray){ JSONArray innerJsonArray = (JSONArray) value; for (int i = 0; i < innerJsonArray.length(); i++) { Object innerValue = innerJsonArray.get(i); // 在这里进行业务处理 } } // 在这里进行业务处理 }
在上面的代码中,我们判断该键对应的值是否是JsonArray,如果是则遍历JsonArray中的元素并进行业务处理。
五、JsonObject遍历方法
JsonObject内部还包含了各种各样的方法,我们需要对这些方法进行遍历。
JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); if(key.equals("name")){ String name = jsonObject.getString(key); // 业务处理代码 }else if(key.equals("age")){ int age = jsonObject.getInt(key); // 业务处理代码 }else if(key.equals("gender")){ boolean gender = jsonObject.getBoolean(key); // 业务处理代码 } }
在上面的代码中,我们判断该键的值是什么类型并将其转换为对应的类型,再进行业务处理。
六、JsonObject遍历对象
在JsonObject内部也可能存在自定义的对象,我们需要对这些自定义对象进行遍历。
{ "name": "小明", "school": { "name": "清华大学", "rank": 1 } }
public class School { private String name; private int rank; // setter和getter方法 } JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); if(value instanceof JSONObject){ if(key.equals("school")){ JSONObject innerJsonObject = (JSONObject) value; School school = new School(); school.setName(innerJsonObject.getString("name")); school.setRank(innerJsonObject.getInt("rank")); // 业务处理代码 } } // 在这里进行业务处理 }
在上面的代码中,我们判断该键对应的值是否是对象类型,如果是则将该对象转换为自定义的对象并进行业务处理。
七、JsonObject遍历多级
在JSONObject内部可能嵌套多层对象,我们需要对多级对象进行遍历。
{ "name": "小明", "school": { "name": "清华大学", "address": { "country": "中国", "province": "北京", "city": "海淀" } } }
public class Address { private String country; private String province; private String city; // setter和getter方法 } public class School { private String name; private Address address; // setter和getter方法 } JSONObject jsonObject = new JSONObject(jsonString); Iteratoriterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); if(value instanceof JSONObject){ if(key.equals("school")){ JSONObject innerJsonObject = (JSONObject) value; School school = new School(); school.setName(innerJsonObject.getString("name")); JSONObject addressObject = innerJsonObject.getJSONObject("address"); Address address = new Address(); address.setCountry(addressObject.getString("country")); address.setProvince(addressObject.getString("province")); address.setCity(addressObject.getString("city")); school.setAddress(address); // 业务处理代码 } } // 在这里进行业务处理 }
在上面的代码中,我们逐级判断对象类型,再将其转换为相应的自定义对象并进行业务处理。
八、JsonObject遍历键值对
有时我们需要同时获取JsonObject的key和value,我们可以使用map存储键值对。
JSONObject jsonObject = new JSONObject(jsonString); Mapmap = new HashMap<>(); Iterator iterator = jsonObject.keys(); while(iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); map.put(key, value); } // 进行业务处理
在上面的代码中,我们通过迭代器遍历JsonObject的key并获取value,再将键值对存储到map中。
九、Json遍历选取
在使用Json进行开发的时候,通常情况下我们不会对Json进行全遍历,而是只选取一部分数据进行处理。
{ "name": "小明", "age": "18", "gender": "男" }
JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); // 进行业务处理
在上面的代码中,我们只选取了Json中的name和age两个字段。
总结
使用JsonObject进行数据处理是一项非常常见的工作,本文详细讲解了JsonObject遍历key的各种方式,其中涉及到了遍历JsonArray、遍历多级JsonObject等高级技巧。希望本文能够对大家有所帮助。