欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSON基础篇之-----JSON的解析和生成

程序员文章站 2024-02-04 09:00:34
...

一、json的简介

  •    JSON(javaScript Object Notation ,JS对象标记),是一种轻量级的数据交换。
  •    JSON是存储文本信息的语法 类似于XML
  •     JSON 比 XML 更小 更快 更易解析
  •     JSON数据作为目前网络主流的数据传输格式之一 应用十分广泛
  •     JSON使用javascript语法来表述对象 但是JSON是独立于语言和平台的
  •     JSON解析器 和 JSON库支持许多不同的编程语言

二、JSON和xml的异同

不同点:

  • json没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的javascript eval()方法进行解析
  • 使用数组
  • 不能使用保留字

相同:

  • JSON是纯文本
  • JSON具有可读性
  • JSON可以通过AJAX进行传输

二、JSON的语法

  • 【】:表示数组
  •   { }:表示对象
  •   " ":表示属性名字或字符串类型的值
  •  , :   多个属性的间隔符或者多个元素的间隔符

例如:  

        对象的存储格式:

  •         String json = "{'id':33,'name':'离家','age':12}";

        数组的存储格式

  •         String json = "['北京','上海','广州']";

     数组中存储对象:

  •     JSON格式: 
  •         [
  •             {name:"张三",age:23},
  •             {name:"李四",age:23},
  •             {name:"王五",age:23}
  •         ]
     

三 、JSON的解析和生成

1、原生解析,古老的解析方法

     a:导入jar包:json-lib.jar      链接:https://pan.baidu.com/s/1B6HUiUJdMsOLYPU4IQiYlw 密码:1ac2

     b:根据json创建实体类 Grade(id,name,stus)  Student(id,name,age)

     c:解析JSON重要的代码:  

	@Test
	   public void test3(){ 
 String json = "{id:1,name:'清华',stus:[{id:102,name:'花花',age:56},{id:1093,name:'kk',age:34}]}";  
		 try {
             //创建JSON对象
			 JSONObject jsonObject  = new JSONObject(json);
	         Grade grade  = new Grade();
	         grade.setId(jsonObject.getInt("id"));
	         grade.setName(jsonObject.getString("name"));
		    JSONArray  jsonArray = jsonObject.getJSONArray("stus");
		    List<Student> list = new ArrayList<>();
		    for(int  i = 0 ;i<jsonArray.length();i++ ){
		    	 JSONObject jsonObject2 = jsonArray.getJSONObject(i);
		        Student s = new Student();
		        s.setAge(jsonObject2.getInt("age"));
		        s.setId(jsonObject2.getInt("id"));
		        s.setName(jsonObject2.getString("name"));
		       list.add(s);
		    }
		    grade.setStus(list);
		    System.out.println(grade);
		    
		 } catch (JSONException e) {
			e.printStackTrace();
		}
	}

D:生成JSON的重要代码   对象-------》json字符串

@Test
	public void createJSOn(){
		Student s = new Student();
		s.setAge(23);
	     s.setId(11);
	     s.setName("美肌");
	      //原生方式解析-->json
	   JSONObject jsonObject  = new JSONObject();
	   try {
		    jsonObject.put("id", s.getId());
		   jsonObject.put("name", s.getName());
		   jsonObject.put("age", s.getAge());
		   System.out.println(jsonObject.toString());
	} catch (JSONException e) {
		e.printStackTrace();
	}
	}

2、fastJSON  (alibaba )

主要方法:

  • JSON.parseObject(json,Class<>);  json对象--->对象
  • JSON.parseArray(json,Class<>); json数组--->集合
  • JSON.toJSONString(对象/集合); 对象/集合---->json

解析json的重要代码   json---->对象

@Test
	public void fastJson2(){
		String json = "[{id:101,name:'天天',age:24},{id:122,name:'密码',age:22}]";
	   List<Student> stu = JSON.parseArray(json, Student.class);
	System.out.println(stu);
	}
	
	@Test
	public void fastJson3(){
    String json  ="{id:1,name:'复旦',stus:[{id:22,name:'meimi',age:13},{id:34,name:'小法',age:23}]}";		
	Grade  d =JSON.parseObject(json, Grade.class);
	System.out.println(d);
	}

 

生成json的重要代码   对象---->json

@Test
	public void createJson1(){
		Student s = new Student();
		s.setAge(23);
	   s.setId(11);
	  s.setName("美肌");
       Object json  = JSON.toJSON(s);   //对象
       System.out.println(json);   
	  List<Student> list  =new ArrayList<>();
	  for(int i =0 ;i<10;i++){
		  Student s1 = new Student();
		  s1.setAge(i+10);
		  s1.setName("华思凡"+i);
		  s1.setId(i);
		  list.add(s1);
	  }
	  //集合转json
	 String jsonArray =  JSON.toJSONString(list);  //集合
	System.out.println(jsonArray);
	}

3、Gson     (Google )

     Gson gson = new Gson();
       json--->对象

  •    gson.formJson(json,Class<>);  json--->对象
  •    gson.fromJson(json,new TypeToken<List<Student>>(){}.getType());  json数组--->集合 

   对象-->json

  •      gson.toJson(对象/集合);  对象--->json对象

解析json的重要代码

	@Test
	public void test2() throws JSONException{
		String json  = "[{id:34,name:'呵呵',age:12},{id:32,name:'乐乐',age:12}]";
	   //创建JSON对象
		Gson gson = new Gson();
	   List<Student> s = gson.fromJson(json,new TypeToken<List<Student>>(){}.getType());
	    System.out.println(s);
	   System.out.println("第一种:上面的");
	   //第二种
        JSONArray  jsonArray = new JSONArray(json);
	    for(int i = 0;i<jsonArray.length();i++){
			Student s1 = gson.fromJson(jsonArray.getString(i),Student.class);
		   System.out.println(s1);
	    }
	}
	@Test
	public void test3(){
		 String json = "{id:1,name:'清华',stus:[{id:102,name:'花花',age:56},{id:1093,name:'kk',age:34}]}";  
			Gson gson  =new Gson();
	       Grade d =gson.fromJson(json, Grade.class);
	       System.out.println(d);
	}

生成json的重要代码     gson.toJson(s)         gson.toJson(list);

@Test
   public void test4(){
	   Student s = new Student();
	   s.setAge(12);
	   s.setId(33);
	  s.setName("梨花");   
      Gson gson = new Gson();
     System.out.println(gson.toJson(s));
      List<Student> list  = new ArrayList<Student>();
      for(int i  = 0;i<10;i++){
    	  Student s1  = new Student();
    	  s1.setId(i);
    	  s1.setName("小美美"+i);
    	  s1.setAge(33);
    	  list.add(s1);
      }
      String l =  gson.toJson(list);
      System.out.println(l);   
   }