Json是一种轻量级的数据交换格式,采用一种key-value对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。
为什么要用json?
1.数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小,其可读性也不错,基本具备了结构化数据的性质。
2.易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的解析,通过遍历数组以及访问对象属性来获取数据,
3.因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 且易于维护,语言无关,任何语言都能轻松搞它,类型安全,值是有类型的,比如整数、字符串、布尔等。
JSON对象
{
"ID": 1001,
"name": "张三",
"age": 24
}
JSON对象数组
[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}
]
example
{
"部门名称":"研发部",
"部门成员":[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}],
"部门位置":"我家"
}
易错点:最后一行不要多加逗号
JSONArray.fromObject(list)等可以返回JSONArray对象
fastjson
FastJson是用于java后台处理json格式数据的一个工具包,包括“序列化”和“反序列化”两部分。
可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
包含:
(1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
(2)JSONObject:fastJson提供的json对象。
(3)JSONArray:fastJson提供json数组对象。
示例
public class Person {
public int age;
public String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public Person() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.zpx.pojo.Person;
import java.util.List;
public class testFastjson {
public static void main(String[] args) {
//封装成json(对象--》json字符串)
Person zpx = new Person(5, "SSS");
String s = JSON.toJSONString(zpx);
System.out.println(s);
//取出,json字符串转json对象
JSONObject jsonObject = JSON.parseObject(s);
Integer age = jsonObject.getInteger("age");//取到json对象中的key对应value
System.out.println(age);
//指定返回jsonobject的对象
Person person = JSON.parseObject(s, Person.class);
//复杂json
String str ="{\"meta\":{\"code\":\"0\",\"message\":\"同步成功!\"},\"data\":{\"orderno\":\"U_2018062790915774\",\"suborderno\":\"SUB_2018062797348039\",\"type\":\"organunit\",\"result\":{\"organunit\":{\"totalCount\":2,\"successCount\":0,\"failCount\":2,\"errors\":[{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"254\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false},{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"255\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false}]},\"role\":{\"totalCount\":0,\"successCount\":0,\"failCount\":0,\"errors\":[]},\"user\":{\"totalCount\":0,\"successCount\":0,\"failCount\":0,\"errors\":[]}}}}";
JSONObject jsonObject2 = JSON.parseObject(str);
JSONObject data = jsonObject2.getJSONObject("data");//两次getJsonObject
JSONObject result = data.getJSONObject("result");//到result这个jsonObject下
String organunit1 = result.getString("organunit");
System.out.println(organunit1);
JSONObject organunit = result.getJSONObject("organunit");//到organunit这个jsonObject下
JSONArray errors2 = organunit.getJSONArray("errors");//拿到对应json数组
List<Error> error = JSON.parseObject(errors2.toJSONString(), new TypeReference<List<Error>>() {
});
String s1 = JSONObject.toJSONString(errors2);//jsonarray--》json字符串
List<Error> errors = JSONObject.parseArray(s1, Error.class);//把此字符串转换成集合
}
}
前端接收后台所发(异步)
$ .ajax({
url : "myfileAction",
dataType : "json",
type : "post",
success : function(data) {
}
});
(data)json字符串-》json对象
var obj = eval('(' + data + ')');
或者 var obj = JSON.parse(data); //更安全
拿到obj(对应json对象),该怎么渲染怎么渲染
前端发给后端json
<script type="text/javascript">
$(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"zhangsan","address":"bj"};
var data2={"userName":"lisi","address":"nj"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
}
});
});
</script>
可以通过JQuery的$.each()方法遍历输出
var arr = [{ name: "john", lang: "js" },{ name: "张三", lang: "ext" }];
$.each( arr, function(index, content)
{
alert( "the man's no. is: " + index + ",and " + content.name + " is learning " + content.lang );
});
//for遍历
for(var i=0; i<arr.length; i++)
{
alert(arr[i].name+" " + arr[i].value)
}
//取arr数组里一个叫name的值,比如上面name后面值是张三,就取出张三
对于JSON对象《—》JSON字符串转换直接用 toJSONString()这个方法。
javaBean与JSON格式字符串转换用:JSON.toJSONString(obj);
javaBean与json对象间的转换用:JSON.toJSON(obj),然后使用强制类型转换,JSONObject或者JSONArray。