JSON 数据操作
2018,狗年。如果在你出生日期的年份上加12等于2018的话,私聊我,今年是你的本命年,你得发红包!!!
子(鼠)、丑(牛)、寅(虎)、卯(兔)、辰(龙)、巳(蛇)、午(马)、未(羊)、申(猴)、酉(鸡)、戌(狗)、亥(猪)
JSON:JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式。类似 XML,但比XML 更小、更快,更易解析。
从上面这句话可以看出:<1> JSON 是纯文本
<2> JSON 具有层级结构(类似XML,键值对)
<3> JSON 可通过 JavaScript 进行解析
个人理解为:JSON 是 在js中处理对象和交换数据的,采用键值对方式存贮数据的文本轻量级格式。
JSON 语法:<1> 数据在键/值对中
<2> 数据由逗号分隔
<3> 花括号保存对象 ---> { "name":"zhangs" , "year":"18" }
<4> 方括号保存数组 ---> { "employees" :[{ " name":"zhangs" , "year":"18" } ,{ " name":"zhangs" , "year":"18" }] } (多个对象)
获取数据:employees[0].name;
接下来,就讲解几种常用的 json 数据处理 (java 和 jsp)
一、jsp -->java
1.json 操作多个实体对象(列如保存提交多个对象,采用序列化表单,json转换) jsp <input type="hidden" id="inputForm" name="inputForm"/>
js var inputForm = $("#inputForm").serializeObject(); $("#inputForm").val(JSON.stringify(inputForm));
java String inputForm = request.getParameter("inputForm"); Employee employee = (Employee) JsonMapper.fromJsonString(inputForm, Employee.class); //(转成实体对象,不能获取冗余的其他对象) JSONObject json = new JSONObject(inputForm); //(转成Json对象) String name = json.getString("project.name"); //(获取其他对象值) String linkphone = json.getString("project.linkphone");
二、java -->jsp
1.json 集合转json
java List<Employee> employeeList = proinfoService.findMapList(employee); model.addAttribute("employeeList", JsonMapper.getInstance().toJson(employeeList));
js 对于服务器返回的JSON字符串,如果请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,要将该字符串放于eval()中执行一次。 $.each(eval(employeeList),function(n,value) { String name = value.name; }); 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
2.json 操作对象集合(用于动态加载集合数据) java 返回List<Employee> Page<Employee> page = new Page<Employee>(Integer.valueOf(start), Integer.valueOf(count)); String organId = request.getParameter("organId"); Employee employee = new Employee(); employee.setIntermediaryid(organId); page = employeeService.findPage(page, employee); return page.getList(); js $.ajax({ url: '/outer/getEmployeeList', type: 'post', data: 'start='+start+'&count='+pageSize+'&organId='+organId, dataType: 'json', success: function(data){ var str = ""; for(i = 0; i < data.length; i++){ if(0 == i%2){
//(turnToEmployee(\''+ data[i].id + '\') -- \' 转义 单眼号 ' ) str += '<tr style="background-color:#F4F7FB" onclick="turnToEmployee(\''+ data[i].id + '\')">' + '<td>' + data[i].name+ '</td>'; }else{ str += '<tr onclick="turnToEmployee(\''+ data[i].id + '\')">' + '<td>' + data[i].name+ '</td>'; } str += '<td>' + data[i].idcard+ '</td>' ; str += '<td>' + data[i].linkphone+'</td>' str += '<td>' + data[i].workyear+'</td>' } $(".listTable tbody").empty(); $(".listTable tbody").append(str); } });
3.很特殊的一种 json 操作String集合 java 返回List<String> List 中的元素是按照 add 顺序加载的,并且里面有重复的元素。这就是有序可重复的意思。 Set 中的元素并没有按照 add 顺序加载的,并且里面没有重复的元素。这就是无序不可重复的意思。 List<String> temp = Lists.newArrayList(); temp.add(p.getName()); HashSet<String> h = new HashSet<String>(temp); //(用hashSet 去重顺序不变,集合类型得相匹配) temp.clear(); temp.addAll(h); return JsonMapper.toJsonString(temp); jsp $.ajax({ url: "", type: 'post', data: '', dataType: 'json', async: false, success: function(data){ $("#"+data[d]).css("background", "#6699FF"); } });
最后再提两个知识点:JSON.parse() JSON.stringify()
parse 用于从一个字符串中解析出对象 eg:
var str = '{"name":"zhangs","age":"18"}';
JSON.parse(str); -- >name : "zhangs"
-- >age : "18"
stringify 用于把对象解析成字符串 eg:
var obj = {name: "zhangs" , age: "18"};
JSON.stringify(obj); -- > '{"name":"zhangs","age":"18"}';
人依旧,物依然,又是一年;想也好,忘也罢,本是平凡;今儿好,明更好,衷心祝愿;情也真,意也切,常驻心间。提前预祝2018年新年快乐!!!