Fastjson Obejct/Map/JSON/String 互转


Fastjson 소개

Fastjson은 Java 언어로 작성된 고성능의 완전한 JSON 라이브러리입니다. 이는 JSON 구문 분석의 성능을 최고 수준으로 향상시키기 위해 "가정 순서 빠른 일치" 알고리즘을 사용합니다. 이는 현재 Java 언어에서 가장 빠른 JSON 라이브러리입니다. Fastjson 인터페이스는 간단하고 사용하기 쉬우며 캐시 직렬화, 프로토콜 상호 작용, 웹 출력 및 Android 클라이언트와 같은 다양한 애플리케이션 시나리오에서 널리 사용되었습니다.

주요 기능:

  • Fast FAST(잭슨을 포함한 다른 어떤 Java 기반 파서 및 생성기보다 빠름) #🎜🎜 ##🎜 🎜#Powerful(Java Bean 클래스, 컬렉션, 맵, 날짜 또는 열거형을 포함한 일반 JDK 클래스 지원)


# 🎜🎜# 종속성 없음(JDK를 제외한 다른 라이브러리에 대한 종속성 없음)

    오픈 소스, Apache License 2.0 프로토콜 사용.
  • 1.2 Fastjson을 얻는 방법은 무엇입니까?
  • https://github.com/alibaba/fastjson
Fastjson Obejct/Map/JSON/String 상호 변환 방법

로그 구문 분석과 프런트엔드 및 백엔드 데이터 전송 상호 작용에서 문자열과 맵, json, xml 및 기타 형식의 상호 변환 및 구문 분석 시나리오를 자주 접하게 됩니다. 그중 json은 기본적으로 교차 언어, 교차 프런트엔드, 교차 엔드가 됩니다. 사실상의 표준 데이터 상호 작용 형식입니다. 다양한 언어로 json을 구문 분석하기 위한 라이브러리가 많이 있다고 말할 수 있습니다. (특정 json 형식 및 타사 라이브러리에 대한 소개는 http://www.json.org/json-을 참조하세요. zh.html) 예를 들어 Python은 내장 라이브러리에 통합되어 표준 API가 되었습니다. 오늘은 Java에서 json 형식을 편리하게 사용하는 방법에 대해 이야기하겠습니다.

위의 링크 소개를 보면 Java가 가장 많은 삼자 JSON 라이브러리를 보유하고 있음을 알 수 있습니다. 이는 백 개의 꽃이 피어나고 백 가지 학파가 경쟁하는 리듬이라고 할 수 있습니다. . . 그러나 일부 라이브러리에는 체인 종속성 문제가 있으므로 이를 사용할 때 주의해야 합니다. 종속성을 관리하기 위해 maven을 사용하지 않으면 json-lib, smart-json 등과 같이 사용하기가 어렵습니다. 아래에서 추천하고 싶은 것은 Alibaba 엔지니어들이 오픈소스로 제공하는 json 라이브러리인 FastJSON입니다. 이 라이브러리는 구문 분석 속도와 사용 편의성 측면에서 매우 좋습니다.

1. fastjson을 이해하세요

2. fastjson


주요 사용 입구

Fastjson API 항목 클래스는 com.alibaba.fastjson.JSON입니다. 일반적인 직렬화 작업은 JSON 클래스에서 수행할 수 있습니다. 방법은 직접 수행됩니다.
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
3. 클래스 라이브러리에 대한 몇 가지 참고사항

SerializeWriter: StringBuffer

JSONArray와 동일: List<Object>

# 🎜🎜#JSONObject: Map<String, Object>

JSON 역직렬화에는 실제 배열이 없으며 필수 유형은 List<Object>

4이며, fastjson도 동일합니다. 주석 지원 및 전체 유형 직렬화 지원과 같은 매우 고급 기능

이 많이 있습니다. 이러한 기능은 좋은 기능이자 강력한 기능이며 이 테스트의 범위에 포함되지 않습니다.

5, 테스트 코드

package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.serializer.SerializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 

import java.util.*; 

/** 
* Created by IntelliJ IDEA. 
* 
* @author leizhimin 11-11-22 上午9:15 
*/ public class Foo { 
	private String vString = "vStringhehhehe"; 
	private char vchar = 'x'; 

	private byte vbyte = 64; 
	private short vshort = 128; 
	private int vint = 65535; 
	private long vlong = 9999999L; 

	private float vfloat = 12.1f; 
	private double vdouble = 22.203d; 

	private boolean vboolean = false; 

//	private Date vdate = new Date(); private Date dddd = new Date(); 
	private Date vDate = new Date(); 
	private Date v_Date = new Date(); 
	private Object vnull = null; 

	private String[] avString = {"aaa", "bbb", "ccc"}; 
	private int[] avint = {1, 2, 3, 4}; 
	private boolean[] avboolean = {true, false, true, true}; 

	private List<String> listString = new ArrayList<String>(); 
	private Map<String, String> map = new HashMap<String, String>(); 

	private Bar bar = new Bar(); 
	private Bar[] avBar = {new Bar(), new Bar()}; 
	private List<Bar> listBar = new ArrayList<Bar>(); 

	{ 
		listString.add("listString1"); 
		listString.add("listString2"); 
		listString.add("listString3"); 

		map.put("x", "s11111x"); 
		map.put("y", "s22222y"); 
		map.put("z", "s33333z"); 

		listBar.add(new Bar()); 
		listBar.add(new Bar()); 
		listBar.add(new Bar()); 
	} 



	public String getvString() { 
		return vString; 
	} 

	public void setvString(String vString) { 
		this.vString = vString; 
	} 

	public char getVchar() { 
		return vchar; 
	} 

	public void setVchar(char vchar) { 
		this.vchar = vchar; 
	} 

	public byte getVbyte() { 
		return vbyte; 
	} 

	public void setVbyte(byte vbyte) { 
		this.vbyte = vbyte; 
	} 

	public short getVshort() { 
		return vshort; 
	} 

	public void setVshort(short vshort) { 
		this.vshort = vshort; 
	} 

	public int getVint() { 
		return vint; 
	} 

	public void setVint(int vint) { 
		this.vint = vint; 
	} 

	public long getVlong() { 
		return vlong; 
	} 

	public void setVlong(long vlong) { 
		this.vlong = vlong; 
	} 

	public float getVfloat() { 
		return vfloat; 
	} 

	public void setVfloat(float vfloat) { 
		this.vfloat = vfloat; 
	} 

	public double getVdouble() { 
		return vdouble; 
	} 

	public void setVdouble(double vdouble) { 
		this.vdouble = vdouble; 
	} 

	public boolean isVboolean() { 
		return vboolean; 
	} 

	public void setVboolean(boolean vboolean) { 
		this.vboolean = vboolean; 
	} 

	public Date getDddd() { 
		return dddd; 
	} 

	public void setDddd(Date dddd) { 
		this.dddd = dddd; 
	} 

	public Date getV_Date() { 
		return v_Date; 
	} 

	public void setV_Date(Date v_Date) { 
		this.v_Date = v_Date; 
	} 

	public Date getvDate() { 
		return vDate; 
	} 

	public void setvDate(Date vDate) { 
		this.vDate = vDate; 
	} 

	public Object getVnull() { 
		return vnull; 
	} 

	public void setVnull(Object vnull) { 
		this.vnull = vnull; 
	} 

	public String[] getAvString() { 
		return avString; 
	} 

	public void setAvString(String[] avString) { 
		this.avString = avString; 
	} 

	public int[] getAvint() { 
		return avint; 
	} 

	public void setAvint(int[] avint) { 
		this.avint = avint; 
	} 

	public boolean[] getAvboolean() { 
		return avboolean; 
	} 

	public void setAvboolean(boolean[] avboolean) { 
		this.avboolean = avboolean; 
	} 

	public List<String> getListString() { 
		return listString; 
	} 

	public void setListString(List<String> listString) { 
		this.listString = listString; 
	} 

	public Map<String, String> getMap() { 
		return map; 
	} 

	public void setMap(Map<String, String> map) { 
		this.map = map; 
	} 

	public Bar getBar() { 
		return bar; 
	} 

	public void setBar(Bar bar) { 
		this.bar = bar; 
	} 

	public Bar[] getAvBar() { 
		return avBar; 
	} 

	public void setAvBar(Bar[] avBar) { 
		this.avBar = avBar; 
	} 

	public List<Bar> getListBar() { 
		return listBar; 
	} 

	public void setListBar(List<Bar> listBar) { 
		this.listBar = listBar; 
	} 
}

package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.serializer.SerializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 

import java.util.Date; 
import java.util.Random; 

/** 
* Created by IntelliJ IDEA. 
* 
* @author leizhimin 11-11-22 上午9:15 
*/ public class Bar { 
	public static SerializeConfig mapping = new SerializeConfig(); 
	private String barName; 
	private int barAge; 
	private Date barDate = new Date(); 
	static { 
		mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd")); 
	} 
	{ 
		Random r = new Random(); 
		barName = "sss_"+String.valueOf(r.nextFloat()); 
		barAge = r.nextInt(); 
	} 

	public static void main(String[] args) { 
		Object obj = JSON.toJSON(new Bar()); 
		String x1 = JSON.toJSONString(new Bar(), true); 
		System.out.println(x1); 
		String x2 = JSON.toJSONString(new Bar(), mapping); 
		System.out.println(x2); 
	} 

	public String getBarName() { 
		return barName; 
	} 

	public void setBarName(String barName) { 
		this.barName = barName; 
	} 

	public int getBarAge() { 
		return barAge; 
	} 

	public void setBarAge(int barAge) { 
		this.barAge = barAge; 
	} 

	public Date getBarDate() { 
		return barDate; 
	} 

	public void setBarDate(Date barDate) { 
		this.barDate = barDate; 
	} 

	@Override 
	public String toString() { 
		return "Bar{" + 
				"barName='" + barName + '\'' + 
				", barAge=" + barAge + 
				", barDate=" + barDate + 
				'}'; 
	} 
}


package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.JSONArray; 
import com.alibaba.fastjson.serializer.SerializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 

import java.util.*; 

/** 
* Created by 2IntelliJ IDEA. 
* 
* @author leizhimin 11-11-22 上午9:45 
*/ public class Test { 
	private static SerializeConfig mapping = new SerializeConfig(); static { 
		mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); 
	} 

	public static void main(String[] args) { 
		Foo f1 = new Foo(); 
		Date date = new Date(); 
		String text = JSON.toJSONString(date, mapping); 
		System.out.println(text); 
		System.out.println(JSON.toJSONString(f1, true)); 
		String x2 =JSON.toJSONString(f1, mapping); 
		System.out.println(x2); 
	} 

	public static void json2List(){ 
		//List -> JSON array 
		List<Bar> barList = new ArrayList<Bar>(); 
		barList.add(new Bar()); 
		barList.add(new Bar()); 
		barList.add(new Bar()); 
		String json= JSON.toJSONString(barList, true); 
		System.out.println(json); 
		//JSON array -> List 
		List<Bar> barList1 = JSON.parseArray(json,Bar.class); 
		for (Bar bar : barList1) { 
			System.out.println(bar.toString()); 
		} 
	} 

	public static void json2Map(){ 
		//Map -> JSON Map<String,Bar> map = new HashMap<String, Bar>(); 
		map.put("a",new Bar()); 
		map.put("b",new Bar()); 
		map.put("c",new Bar()); 
		String json = JSON.toJSONString(map,true); 
		System.out.println(json); 
		//JSON -> Map Map<String,Bar> map1 = (Map<String,Bar>)JSON.parse(json); 
		for (String key : map1.keySet()) { 
			System.out.println(key+":"+map1.get(key)); 
		} 
	} 

	public static void array2JSON(){ 
		String[] arr_String    = {"a","b","c"}; 
		String json_arr_String = JSON.toJSONString(arr_String,true); 
		System.out.println(json_arr_String); 
		JSONArray jsonArray = JSON.parseArray(json_arr_String); 
		for (Object o : jsonArray) { 
			System.out.println(o); 
		} 
		System.out.println(jsonArray); 
	} 
	public static void array2JSON2(){ 
		Bar[] arr_Bar    = {new Bar(),new Bar(),new Bar()}; 
		String json_arr_Bar = JSON.toJSONString(arr_Bar,true); 
		System.out.println(json_arr_Bar); 
		JSONArray jsonArray = JSON.parseArray(json_arr_Bar); 
		for (Object o : jsonArray) { 
			System.out.println(o); 
		} 
		System.out.println(jsonArray); 
	} 

	public static void map2JSON(){ 
		Map map = new HashMap(); 
		map.put("a","aaa"); 
		map.put("b","bbb"); 
		map.put("c","ccc"); 
		String json=JSON.toJSONString(map); 
		System.out.println(json); 
		Map map1 = JSON.parseObject(json); 
		for (Object o : map.entrySet()) { 
			Map.Entry<String,String> entry = (Map.Entry<String,String>)o; 
			System.out.println(entry.getKey()+"--->"+entry.getValue()); 
		} 
	} 
}


설명:

SerializeConfig: 직렬화 프로세스 중 일부 직렬화 프로세스를 위한 특수 구성으로 여기에서 날짜 형식을 정의하는 데 사용됩니다.

유형이 필요한 전체 유형 직렬화 프로세스의 경우 JSON.toJSONStringZ() 메서드를 호출해야 합니다.

출력을 미화해야 하는 경우 직렬화 미화 스위치를 켜고 메서드에서 true 매개변수를 설정해야 합니다.

출력 결과:
"2011-11-23 23:30:33" { 
  "avBar":[{ 
    "barAge":174398800, 
    "barDate":1322062233062, 
    "barName":"sss_0.62378174" 
  },{ 
    "barAge":38938962, 
    "barDate":1322062233062, 
    "barName":"sss_0.36014742" 
  }], 
  "avString":["aaa","bbb","ccc"], 
  "avboolean":[true,false,true,true], 
  "avint":[1,2,3,4], 
  "bar":{ 
    "barAge":1601495948, 
    "barDate":1322062233062, 
    "barName":"sss_0.46644872" 
  }, 
  "dddd":1322062233046, 
  "listBar":[ 
    { 
      "barAge":-1090113522, 
      "barDate":1322062233062, 
      "barName":"sss_0.83562374" 
    }, 
    { 
      "barAge":478603194, 
      "barDate":1322062233062, 
      "barName":"sss_0.59483266" 
    }, 
    { 
      "barAge":1118357669, 
      "barDate":1322062233062, 
      "barName":"sss_0.9961642" 
    } 
  ], 
  "listString":[ 
    "listString1", 
    "listString2", 
    "listString3" 
  ], 
  "map":{"x":"s11111x","y":"s22222y","z":"s33333z"}, 
  "v_Date":1322062233046, 
  "vboolean":false, 
  "vbyte":64, 
  "vchar":"x", 
  "vdouble":22.203, 
  "vfloat":12.1, 
  "vint":65535, 
  "vlong":9999999, 
  "vshort":128 } 
{"avBar":[{"barAge":174398800,"barDate":"2011-11-23 23:30:33","barName":"sss_0.62378174"},{"barAge":38938962,"barDate":"2011-11-23 23:30:33","barName":"sss_0.36014742"}],"avString":["aaa","bbb","ccc"],"avboolean":[true,false,true,true],"avint":[1,2,3,4],"bar":{"barAge":1601495948,"barDate":"2011-11-23 23:30:33","barName":"sss_0.46644872"},"dddd":"2011-11-23 23:30:33","listBar":[{"barAge":-1090113522,"barDate":"2011-11-23 23:30:33","barName":"sss_0.83562374"},{"barAge":478603194,"barDate":"2011-11-23 23:30:33","barName":"sss_0.59483266"},{"barAge":1118357669,"barDate":"2011-11-23 23:30:33","barName":"sss_0.9961642"}],"listString":["listString1","listString2","listString3"],"map":{"x":"s11111x","y":"s22222y","z":"s33333z"},"v_Date":"2011-11-23 23:30:33","vboolean":false,"vbyte":64,"vchar":"x","vdouble":22.203,"vfloat":12.1,"vint":65535,"vlong":9999999,"vshort":128} 

Process finished with exit code 0

소형 테스트 예:

JSONObject json = new JSONObject();
json.put("aa", "11");
json.put("bb", "22");
json.put("cc", "33");String jsonStr = json.toString();
System.out.println(jsonStr);// {"aa":"11","bb":"22","cc":"33"}
	System.out.println(JSONObject.parseObject(jsonStr).get("aa"));// 11String o = "{'area':{'area':'1','pagetype':'home'},'pagetype':'home'}";
System.out.println(((Map) JSONObject.parseObject(o).get("area")).get("area"));// 1String text = JSON.toJSONString(o);Map<String, Object> userMap = 
		JSON.parseObject(o, new TypeReference<Map<String, Object>>() {});
System.out.println(((Map) userMap.get("area")).get("NotExsit"));// nullSystem.out.println(JSON.toJSONString((Map) userMap.get("area")));// {"area":"1","pagetype":"home"}

fastjson은 모든 테스트를 매우 잘 통과했으며 기능적 성능은 1위입니다. 소스 코드 품질이 매우 높고 작성자도 이를 채택했습니다. 최고의 성능을 달성하기 위해 많은 노력을 기울였습니다. 다른 json 라이브러리보다 완전히 우수합니다.

다른 관련 정보를 얻으려면 다음을 클릭하세요. Fastjson 개체 또는 상호 참조를 위한 JSON 배열.