1. 程式人生 > >運用 三種 原生 谷歌 阿里 解析和生成json

運用 三種 原生 谷歌 阿里 解析和生成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}]