zoukankan      html  css  js  c++  java
  • 运用 三种 原生 谷歌 阿里 解析和生成json

    三种类生成JSON数据方法

    JSON(原生):

    第一种

    JSONStringer和JSONObject区别在于添加对象时是按顺序添加的比如说 JSONStringer 添加 a:1 b:2 c:3那么生成的也是{a:1,b:2,c:3},而JSONObject不保证有可能为{c:3,a:1,b:2}

    package com.fmy.bit.test;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.test.AndroidTestCase;
    
    public class TestDemo extends AndroidTestCase{
    	/**
    	 * 原声JSONObject类生成JSON的数据的方法一
    	 */
    	public void test(){
    		
    		
    		JSONObject root = new JSONObject();
    		try {
    			//放入obj方法1: 键:name  值:小 
    			root.put("name", "小");
    			//放入obj方法2:放入 obj 中一个对象 键:name  值:小 
    			JSONObject obj = new JSONObject();
    			obj.put("name1", "大");
    			obj.put("name2", "大");
    			root.put("obj", obj);
    			JSONArray array = new JSONArray();
    			//添加到数组的那个位置 如果前面没有那么直接为null填充前方的值
    			array.put(3, "33");
    			array.put(4, "33");
    			array.put("33");
    			root.put("array", array);
    			
    		} catch (JSONException e) {
    			e.printStackTrace();
    		}
    	}
    }

    输出的JSON:

    {"name":"小","obj":{"name1":"大","name2":"大"},"array":[null,null,null,"33","33","33"]}


    GSON(谷歌)

    支持直接json解析成javabeen 也支持javabeen解析成json 底层运用反射机制打破封装性,即你对象哪怕是私有的不设置set方法依然赋值。阿里巴巴必须设置Get和set方法且方法名必须符合规范

    代码如下:

    package com.fmy.bit.test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import org.json.JSONStringer;
    
    import com.google.gson.Gson;
    
    import android.test.AndroidTestCase;
    
    class A{
    	List<String> list;
    	String name ;
    	int age;
    }
    public class TestDemo extends AndroidTestCase{
    	
    	public void test(){
    		
    		A a = new A();
    		a.list = new ArrayList<String>();
    		a.list.add("我是数组1");
    		a.list.add("我是数组2");
    		a.list.add("我是数组3");
    		a.name = "name";
    		a.age =15;
    		
    		try {
    
    			Gson gson = new Gson();
    			String json = gson.toJson(a);
    			System.out.println(json);
    			System.out.println(json);
    			System.out.println(json);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    输出 {"age":15,"list":["我是数组1","我是数组2","我是数组3"],"name":"name"} 体现GSON反射机制代码:

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    import com.google.gson.Gson;
    
    class A {
    	private String name;
    	private int age;
    
    	
    
    	public int getAge() {
    		return age;
    	}
    
    	public A(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    
    	@Override
    	public String toString() {
    		return "A [name=" + name + ", age=" + age + "]";
    	}
    
    }
    
    public class Test {
    
    	public static void main(String[] args) {
    		Gson gson = new Gson();
    		String name = "{'':'张三','age':18}";
    		A a = new A("张三",18);
    		String json1 = gson.toJson(a);
    		
    		//阿里巴巴的json必须设置get方法不然无数据 这里给age设置 name 不设置get
    		String json2 = JSON.toJSONString(a);
    		
    		System.out.println("json1"+json1);
    		System.out.println("json2"+json2);
    	}
    }

    输出: json1{"name":"张三","age":18} json2{"age":18}

    生成一个json数组代码

    注意反射 不经过set get方法

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.google.gson.Gson;
    
    class A{
    	String name ;
    	int age;
    	public A(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    }
    public class Test {
    	private static  List<A> list;
    
    	public static void main(String[] args) {
    		Gson gson = new Gson();
    		list = new ArrayList<A>();
    		list.add(new  A("S", 18));
    		list.add(new  A("S", 18));
    		String json = gson.toJson(list);
    		System.out.println(json);
    	}
    }

    输出

    [{"name":"S","age":18},{"name":"S","age":18}]

    fastjson 阿里巴巴

    支持javabeen直接生成json 也可以json生成javabean,需要写对get和set方法

    package com.fmy.bit.test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import org.json.JSONStringer;
    
    import com.alibaba.fastjson.JSON;
    import com.google.gson.Gson;
    
    import android.test.AndroidTestCase;
    
    class A{
    	List<String> list;
    	String name ;
    	int age;
    }
    public class TestDemo extends AndroidTestCase{
    	
    	public void test(){
    		
    		A a = new A();
    		a.list = new ArrayList<String>();
    		a.list.add("我是数组1");
    		a.list.add("我是数组2");
    		a.list.add("我是数组3");
    		a.name = "name";
    		a.age =15;
    		try {
    			String json = JSON.toJSONString(a);
    			System.out.println(json);
    			System.out.println(json);
    			System.out.println(json);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    输出一个json数组:





    三种类解析JSON

    JSON(原生):

    第一种

    代码:

    package com.fmy.bit.test;
    	
    	import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    	
    
    
    
    	import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import org.json.JSONStringer;
    	
    
    
    
    	import com.alibaba.fastjson.JSON;
    import com.google.gson.Gson;
    	
    
    
    
    import android.test.AndroidTestCase;
    	
    	class A{
    		List<String> list;
    		String name ;
    		int age;
    	}
    	public class TestDemo extends AndroidTestCase{
    		
    		public void test() throws JSONException{
    			String json ="{'a':1,'b':'nihao',"ds":["s",{'a':2}]}";
    			JSONObject root = new JSONObject(json);
    			int a = root.getInt("a");
    			String b = root.getString("b");
    			JSONArray array = root.getJSONArray("ds");
    			String s = array.getString(0);
    			JSONObject obj = array.getJSONObject(1);
    			String aa = obj.getString("a");
    		
    			System.out.println("a:"+a+"  b:"+b+" array"+array+" s:"+s+" aa:"+aa);
    			System.out.println("a:"+a+"  b:"+b+" array"+array+" s:"+s+" aa:"+aa);
    			System.out.println("a:"+a+"  b:"+b+" array"+array+" s:"+s+" aa:"+aa);
    		}
    	}

    输出结果

    a:1 b:nihao array["s",{"a":2}] s: s aa:2

    GSON(谷歌)

    代码:

    package com.fmy.bit.test;
    	
    	import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import org.json.JSONException;
    
    import android.test.AndroidTestCase;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    	
    	class A{
    		List<String> list;
    		String name ;
    		int age;
    		@Override
    		public String toString() {
    			return "A [list=" + list + ", name=" + name + ", age=" + age + "]";
    		}
    	}
    	
    	public class TestDemo extends AndroidTestCase{
    		
    		public void test() throws JSONException{
    			String json ="{'age':1,'name':'张三',"list":["s"]}";
    			String json2 ="['张三','李四','王万']";
    			String json3 ="[{'张三':1,'李四':2},{'李四':2},{'王万':3}]";
    			List<String>list;
    			Gson gson = new Gson();
    			//生成javabean
    			A a = gson.fromJson(json,A.class);
    			//解析成List
    			list= gson.fromJson(json2, new TypeToken<List<String>>(){}.getType() );
    			
    //			List中包含对象
    			List<Map<String,String>> list2=gson.fromJson(json3, new TypeToken<List<Map<String,String>>>(){}.getType());
    			
    			System.out.println(a);
    			System.out.println(list);
    			System.out.println(list2);
    		}
    	}

    输出:

    A [list=[s], name=张三, age=1] [张三, 李四, 王万] [{张三=1, 李四=2}, {李四=2}, {王万=3}]


    fastjson(阿里巴巴)

    解析时必须设置set方法 生成时json时必须有get方法

    代码:

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    import com.google.gson.Gson;
    
    class A {
    	private String name;
    	private int age;
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    
    	@Override
    	public String toString() {
    		return "A [name=" + name + ", age=" + age + "]";
    	}
    
    }
    
    public class Test {
    
    	public static void main(String[] args) {
    		Gson gson = new Gson();
    		String name = "{'name':'张三','age':18}";
    		
    
    		// 必须设置set方法 如果一个都不匹配报错
    		//匹配一个以上不报错 ,但是无法生成 没有设置set的数据
    		A a = JSON.parseObject(name, A.class);
    
    		// System.out.println("json1"+json1);
    		System.out.println(a);
    	}
    }

    输出 A [name=null, age=18]

    上面的正确写法

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    import com.google.gson.Gson;
    
    class A {
    	private String name;
    	private int age;
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	
    
    	
    
    	
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    
    
    
    
    
    
    	@Override
    	public String toString() {
    		return "A [name=" + name + ", age=" + age + "]";
    	}
    
    }
    
    public class Test {
    
    	public static void main(String[] args) {
    		Gson gson = new Gson();
    		String name = "{'name':'张三','age':18}";
    		
    
    		// 必须设置set方法 如果一个都不匹配报错
    		//匹配一个以上不报错 ,但是无法生成 没有设置set的数据
    		A a = JSON.parseObject(name, A.class);
    
    		// System.out.println("json1"+json1);
    		System.out.println(a);
    	}
    }

    输出

    A [name=张三, age=18]


    生成一个解析数组json的方法生成list:

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    import com.google.gson.Gson;
    
    
    public class Test {
    
    	public static void main(String[] args) {
    	
    		
    		List<String> list = new ArrayList<String>();
    		
    	
    		
    		String string = "['a','b']";
    		 list = JSON.parseArray(string,String.class);
    
    		// System.out.println("json1"+json1);
    		System.out.println(list);
    	}
    }

    输出 [a, b] 如果含有对象

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    import com.google.gson.Gson;
    
    class A {
    	private String name;
    	private int age;
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    
    
    
    	@Override
    	public String toString() {
    		return "A [name=" + name + ", age=" + age + "]";
    	}
    
    }
    
    public class Test {
    
    	public static void main(String[] args) {
    	
    		
    		List<String> list = new ArrayList<String>();
    		
    	
    		
    		String string = "[{'name':'章撒','age':15},{'name':'章撒2','age':215}]";
    //		List<A> parseObject = JSON.parseObject(string,new TypeReference<List<A>> (){});
    		List<A> parseObject = JSON.parseArray(string, A.class);
    
    		// System.out.println("json1"+json1);
    		System.out.println(parseObject);
    	}
    }

    输出>

    [A [name=章撒, age=15], A [name=章撒2, age=215]]

    如果解析json数组中想让list放入Map对象 如List<Map<String,object>> 使用代码

    package com.fmy.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    import com.google.gson.Gson;
    
    class A {
    	private String name;
    	private int age;
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    
    
    
    	@Override
    	public String toString() {
    		return "A [name=" + name + ", age=" + age + "]";
    	}
    
    }
    
    public class Test {
    
    	public static void main(String[] args) {
    	
    		
    		List<String> list = new ArrayList<String>();
    		
    	
    		
    		String string = "[{'name':'章撒','age':15},{'name':'章撒2','age':215}]";
    		List<Map<String,Object>> parseObject = JSON.parseObject(string,new TypeReference<List<Map<String,Object>>> (){});
    //		
    		System.out.println(parseObject);
    	}
    }

    输出

    [{name=章撒, age=15}, {name=章撒2, age=215}]

  • 相关阅读:
    python绘图02
    python验证码
    Python绘图
    idea maven web项目tomcat本地部署
    Spark入门之环境搭建
    假期计划
    This program may be freely redistributed under the terms of the GNU GPL
    大学生恋爱观调查报告
    Python数据分析TMDb 5000 Movie Database电影数据分析
    动态添加HTML时onclick函数参数传递
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152275.html
Copyright © 2011-2022 走看看