Java前后端JSON总结

学习过程中看过很多博客,由于时间久了,以及找不到原文链接,作者看到后找我,本人核实后会加上参考链接,谢谢。

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 myList=new ArrayList<>();
    for(int i=0;i

前端

JSON字符串——>JSON对象

第一种方法:使用jquery中的$.parseJSON(),但是它对json数据格式的要求较高,必须要双引号包围起来


第二种方法:使用jseval来强转
优点是对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))

你可能感兴趣的:(Java前后端JSON总结)