java JSONObject/JSONArray详解
应用架包:json-lib-2.4-jdk15.jar、及相关依赖架包。
一、JSONObject和JSONArray对象
-------------------------------------------------------分割线----------------------------------------------------------------
String jsonObject_str = "{'name':'张三','age':25,sex:'男'}" //一个json对象
JSONObject jSONObject = JSONObject.fromObject(jsonObject_str); // json对象字符串转成JSONArray对象
-------------------------------------------------------分割线----------------------------------------------------------------
String jsonArray_str = "[{'name':'张三','age':25,sex:'男'},{'name':'李四','age':18,sex:'女'}]"; //一个json对象数组
JSONArray jSONArray = JSONArray.fromObject(jsonArray_str); // json数组字符串转成JSONArray对象
-------------------------------------------------------分割线----------------------------------------------------------------
String jsonObject_str = "{'users':[{'name':'张三','age':25,sex:'男'},{'name':'李四','age':18,sex:'女'}],'deptName':''}"; //一个json对象,json对象users属性对应值是json对象数组
JSONObject jSONObject= JSONObject.fromObject(jsonObject_str); // json数组字符串转成JSONArray对象
JSONArray jSONArray = jSONObject.getJSONArray("users"); //JSONArray可以迭代取出每一个JSONObject
-------------------------------------------------------分割线----------------------------------------------------------------
javascript前端应该程序,可以利用{}对象和数组组织复杂的参数到后台。
前端复杂json数组组装,后端用JSONObject/JSONArray互相转换读取。
{}是json对象,[]数组对象。两个互相嵌套组合,组合成复杂的参数。
var json = {};
var array = [];
-------------------------------------------------------分割线----------------------------------------------------------------
二、前台组织json数据(JSONObject/JSONArray)
function buildJsonArray(){ var jsonArray = []; var json = {}; $(".vote-detail .data-item").each(function(index,element){ var id = $(element).data("id"); var name= $(element).data("name"); var sex= $(element).data("sex"); json.id= id; json.name= name; json.sex= sex; jsonArray.push(JSON.stringify(json)); }); var result = "["+jsonArray.join(",")+"]"; return result; } String jsonArray= buildJsonArray();
$.post("/demo/saveUser.do",{jsonArray:jsonArray}}); //传数据,请求后台处理。
三、前台传json对象数组->后台。传json对象数组必须加中括号“[]”
String jsonArray= [{'id':1,'name':'张三','sex':1},{'id':1,'name':'李四','sex':2}];
JSONArray jsonArray= JSONArray.fromObject(jsonArray);
//将JSONArray转换成List,但需要传入实例类(实体类与json具有相同的属性)
List<Entity> list = JSONArray.toList(jsonArray, Entity.class);
//利用JSONArray对象的optJSONObject方法,迭代JSONArray数组里面每个JSONObject。
//遍历一
for(int i=0;i<jsonArray.size();i++){
JSONObject jsonObject = jsonArray.optJSONObject(i);
Object id= jsonObject.get("id");
String name = jsonObject.getString("name");
Integer sex= jsonObject.getInt("sex");
}
//遍历二
for(int i=0;i<jsonArray.size();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
Object id= jsonObject.get("id");
String name = jsonObject.getString("name");
Integer sex= jsonObject.getInt("sex");
}
四、前台传json对象->后台
String jsonObject = {'id':1,'name':'张三','sex':1};
JSONObject jsonObj = JSONObject.fromObject(jsonObject);
System.out.println(jsonObj .get("name"));
五、JSONArray遍历
public static void main(String[] args) { String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]" ; // 一个未转化的字符串 JSONArray json = JSONArray.fromObject(str ); // 首先把字符串转成 JSONArray 对象 if(json.size()>0){ for(int i=0;i<json.size();i++){ JSONObject job = json.getJSONObject(i); // 遍历 jsonarray 数组,把每一个对象转成 json 对象 System.out.println("name="+job.get("name")+":value="+job.get("value")) ; // 得到 每个对象中的属性值 } } }
六、JSONObject和JSONArray互相转换实例。获取前台users数组对象。
//简单一点。传入json对象 public static void main(String[] args) { String json = "{'name':'zhang',sex:1}"; JSONObject jSONObject= JSONObject.fromObject(json); System.out.println(jSONObject.get("name")); } //简单一点。传入数组(json数组) public static void main(String[] args) { String json = "[{'name':'zhang',sex:1},{'name':'li',sex:2}]"; JSONArray jSONArray = JSONArray.fromObject(json); for(int i=0;i<jSONArray.size();i++){ JSONObject jSONObject= jSONArray.getJSONObject(i); System.out.println(jSONObject.get("name")); } } //复制一点。json对象users属性值是json对象数组 public static void main(String[] args) { String json = "{'users':[{'name':'zhang',sex:1},{'name':'li',sex:2}],'deptName':'IT部'}"; JSONObject jSONObject = JSONObject.fromObject(json); JSONArray jSONArray = jSONObject.getJSONArray("users"); Object deptName = jSONObject.get("deptName"); System.out.println("deptName:"+deptName); for(int i=0;i<jSONArray.size();i++){ JSONObject jsonObj = jSONArray.getJSONObject(i); System.out.println("name:"+jsonObj.get("name")+",sex:"+jsonObj.get("sex")); } } //复杂一点。json对象里面包含json对象 public static void main(String[] args) { String json = "{'users':{'one':{'name':'zhang',sex:1},'tow':{'name':'li',sex:2}},'deptName':'IT部'}"; JSONObject jSONObject = JSONObject.fromObject(json); Object users = jSONObject.get("users"); JSONObject jSONObject_1 = JSONObject.fromObject(users); JSONObject jSONObject_2 = jSONObject_1.getJSONObject("one"); System.out.println(jSONObject_2.get("name")); }
总结:如果JSONObject对象属性对应值是数组就用jSONObject.getJSONArray(key)。如果JSONObject对象属性对应值是json对象,需要再转JSONObject对象,然后继续操作。
感谢您的阅读,您的支持是我写博客动力。