学习过程中看过很多博客,由于时间久了,以及找不到原文链接,作者看到后找我,本人核实后会加上参考链接,谢谢。
JSON(JavaScript Object Notation)JavaScript对象表示法
类库选择
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库:
Gson: 谷歌开发的 JSON 库,功能十分全面。
FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。
Jackson: 社区十分活跃且更新速度很快。
FastJson
JSON对象——>JSON字符串(JSONObject对象.toJSONString)
public void testJson() {
JSONObject object = new JSONObject();
object.put("string","string");
object.put("int",2);
object.put("boolean",true);
List integers = Arrays.asList(1,2,3);
object.put("list",integers);
object.put("null",null);
System.out.println(object);
response.getWriter().println(object.toJSONString);
}
JSON字符串——>JSON对象(JSONObject.parseObject(JSON字符串))
public void testJson2() {
JSONObject object = JSONObject.parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}");
String s = object.getString("string");
System.out.println(s);
int i = object.getIntValue("int");
System.out.println(i);
boolean b = object.getBooleanValue("boolean");
System.out.println(b);
List integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
integers.forEach(System.out::println);
System.out.println(object.getString("null"));
}
JSON:JSON字符串Json对象
方法
作用
JSON.parseObject(String)
从字符串解析 JSON 对象
JSON.parseArray(String)
从字符串解析 JSON 数组
JSON.toJSONString(object/array)
将 JSON 对象或 JSON 数组转化为字符串
//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);
JSON和JSONObject的区别
JSON是一个抽象类,JSON中有一个静态方法parseObject(String text),将text解析为一个JSONObject对象并返回;
JSONObject是一个继承自JSON的类,当调用JSONObject.parseObject(result)时,会直接调用父类的parseObject(String text)。
所以两者没什么区别,一个是用父类去调用父类自己的静态的parseObject(String text),一个是用子类去调用父类的静态parseObject(String text),两者调的是同一个方法。
一些博客上的案例
public static void main(String[] args) {
List list=new ArrayList<>();
Student student=new Student("bob",24);
Student student12=new Student("lily", 23);
list.add(student);
list.add(student12);
System.out.println("*******javaBean to jsonString*******");
String str1=JSON.toJSONString(student);
System.out.println(str1);
System.out.println(JSON.toJSONString(list));
System.out.println("******jsonString to javaBean*******");
//Student stu1=JSON.parseObject(str1,new TypeReference(){});
Student stu1=JSON.parseObject(str1,Student.class);
System.out.println(stu1);
System.out.println("******javaBean to jsonObject******");
JSONObject jsonObject1=(JSONObject)JSON.toJSON(student);
System.out.println(jsonObject1.getString("name"));
System.out.println("******jsonObject to javaBean******");
Student student2=JSON.toJavaObject(jsonObject1, Student.class);
System.out.println(student2);
System.out.println("*******javaBean to jsonArray******");
List stulist=new ArrayList<>();
for(int i=0;i<5;i++){
stulist.add(new Student("student"+i, i));
}
JSONArray jsonArrays=(JSONArray)JSON.toJSON(stulist);
for(int i=0;i
System.out.println(jsonArrays.getJSONObject(i));
}
System.out.println("*****jsonArry to javalist******");
List myList=new ArrayList<>();
for(int i=0;i
Student student3=JSON.toJavaObject(jsonArrays.getJSONObject(i), Student.class);
myList.add(student3);
}
for(Student stu:myList){
System.out.println(stu);
}
System.out.println("*****jsonObject to jsonString*****");
String str4=JSON.toJSONString(jsonObject1);
System.out.println(str4);
System.out.println("*******jsonString to jsonObject*****");
JSONObject jso1=JSON.parseObject(str1);
System.out.println(jso1.getString("name"));
System.out.println("*****jsonString to jsonArray*****");
JSONArray jArray=JSON.parseArray(JSON.toJSONString(stulist));
for(int i=0;i
System.out.println(jArray.getJSONObject(i));
}
}
前端
JSON字符串——>JSON对象
第一种方法:使用jquery中的$.parseJSON(),但是它对json数据格式的要求较高,必须要双引号包围起来
var jsonStr1 = "{\"name\":\"盖伦\"}";
var jsonStr2 = '{"name":"不祥之刃"}';
var a = $.parseJSON(jsonStr1);
console.log(a.name);
var c = $.parseJSON(jsonStr2);
console.log("这是一个json对象:",c);
第二种方法:使用js中eval来强转
优点是对json格式要求没有那么严格,但是在处理复杂json数据时不好,例如含有对象的
var jsonstr1="[{\"id\":\"1\",\"name\":\"张三\"},{'id':2,'name':'李四'},{id:3,name:'王五'}]";
//上面这三种写法不论是用单引号包裹或者双引号包裹或不包裹,都可以用eval解析过来
var obj = eval('('+jsonstr1+')');
console.log(obj);
console.log(obj[0].name);
注:其中string必须是JSON字符串,不然报错,而直接eval(JSON对象),会直接返回,因为eval函数中参数只能是字符串,非字符串,会直接返回原对象。
第三种方法:使用浏览器自带的JSON.parse()
与jquery一样,对json格式要求较高
var jsonStr="{\"id\":\"4\",\"name\":\"王五\"}";
var obj = JSON.parse(jsonStr);
console.log(obj);
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。
JSON对象——>json字符串
浏览器支持的转换方式
--json为JSON对象
var temp = JSON.stringify(json);
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。
get请求 JSON特殊字符处理 :
encodeURI("ws://localhost:8080/message?msg="+JSON.stringify(message))