1. 程式人生 > >Json字串與java物件互轉

Json字串與java物件互轉

 
到Json的官網上http://json-lib.sourceforge.net/,下載jar包。在官網也可以看到,使用Json還需要其他的一些jar包,官網上是這樣列的:
 
jakarta commons-lang 2.5
 
jakarta commons-beanutils 1.8.0
 
jakarta commons-collections 3.2.1
 
jakarta commons-logging 1.1.1
 
ezmorph 1.0.6
 
當然,我們也可以使用相對新一些版本的jar包,不過需要注意的是,commons-lang這個jar需要選擇2.6版本以下的(當然包括2.6了),因為版本到3.3.0.1以後,jar包中的包名都發生了變化,再使用的話,會報錯i,當然我也沒有深究到底是哪個jar包引起的(有知道的不妨留言給小弟我,在此感謝)。 
 
Json轉java物件經常會用到兩個類net.sf.json.JSONObject和net.sf.json.JSONArray,通過類名就可以看出來,前者是是針對無序集合而言,後者是針對有序集合如List等而言。
 
簡單介紹以下方法,JSONObject JSONObject.fromObject( Object object )這個方法把java物件做為引數,返回一個JSONObject物件,這個物件就是符合json格式的字串;
 
JSONArray JSONArray.fromObject( Object object )接收一個集合。
 
先定義一個實體類:
 package com.bao.json.demo;

import java.util.ArrayList;
package com.bao.json.domain;

public class User {

	private int id;
	private String name;
	private boolean gender;
	private float price;

	public User() {
		super();
	}

	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean isGender() {
		return gender;
	}

	public void setGender(boolean gender) {
		this.gender = gender;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

} 
以下是工具類:
 package com.bao.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @Description:Json工具類
 * 有序集合以'['開始,以']'結束;其他以'{'開始,以'}'結束.
 * java物件轉字串可以使用JSONArray或JSONObject.
 * @author:bao
 * @date:Dec 24, 2011
 * @see JSONArray
 */
public class JsonUtil {

	/**
	 * @Description:POJO轉Json字串
	 * @param obj
	 * @return String
	 */
	public static String bean2JsonStr(Object obj) {
		JSONObject jsonObj = JSONObject.fromObject(obj);

		return JsonUtil.toString(jsonObj);
	}

	/**
	 * @Description:Json字串轉POJO物件
	 * @param jsonStr
	 * @param pojo
	 * @return Object
	 */
	public static Object jsonStr2Bean(String jsonStr, Class<?> clazz) {
		Object obj;

		JSONObject jsonObject = JSONObject.fromObject(jsonStr);
		obj = JSONObject.toBean(jsonObject, clazz);

		return obj;
	}

	/**
	 * @Description:Json字串轉Map<String, Object>
	 * @param jsonStr
	 * @return Map<String,Object>
	 */
	public static Map<String, Object> jsonStr2Map(String jsonStr) {

		Map<String, Object> result = new HashMap<String, Object>();

		JSONObject jsonObj = JSONObject.fromObject(jsonStr);
		Iterator<?> keys = jsonObj.keys();
		String key;
		Object val;

		while (keys.hasNext()) {
			key = (String) keys.next();
			val = jsonObj.get(key);
			result.put(key, val);
		}

		return result;
	}

	/**
	 * @Description:Json字串轉List,內部物件為Object,需要手動轉換為制定的物件型別
	 * @param jsonStr
	 * @param pojo
	 * @return List
	 */
	public static List jsonStr2List(String jsonStr, Class clazz) {
		List result = new ArrayList();

		JSONArray jsonArray = JSONArray.fromObject(jsonStr);
		JSONObject jsonObj;
		Object pojoVal;

		for (int i = 0; i < jsonArray.size(); i++) {
			jsonObj = jsonArray.getJSONObject(i);
			pojoVal = JSONObject.toBean(jsonObj, clazz);
			result.add(pojoVal);
		}

		return result;
	}

	public static Object[] jsonStr2ObjectArray(String jsonStr) {

		JSONArray jsonArray = JSONArray.fromObject(jsonStr);
		Object[] result = new Object[jsonArray.size()];
		for (int i = 0; i < jsonArray.size(); i++) {
			result[i] = jsonArray.get(i);

		}
		return result;
	}

	/**
	 * @Description:將Object轉化為String
	 * @param obj 指定物件,預設值為""
	 * @return String
	 */
	public static String toString(Object obj) {
		return toString(obj, "");
	}

	/**
	 * @Description:將Object轉化為String
	 * @param obj 指定物件
	 * @param defaultStr 為空的預設字串
	 * @return String
	 */
	public static String toString(Object obj, String defaultStr) {
		String result = defaultStr;
		if (obj != null) {
			result = obj.toString();
		}
		return result;
	}

}
 
以下是通過junit4.7測試過的:
 package com.bao.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.junit.Test;

import com.bao.json.domain.User;

public class JsonUtilTest {

	@Test
	public void testBeanO2JsonStr() {
		String result = JsonUtil.bean2JsonStr(getUser());
		System.out.println(result);
	}

	@Test
	public void testJsonStr2Bean() {
		Object obj = JsonUtil.jsonStr2Bean(JsonUtil.bean2JsonStr(getUser()),
				User.class);
		System.out.println(obj);
	}
	
	@Test
	public void testJsonStr2List(){
		
		List list = JsonUtil.jsonStr2List(getFromList().toString(), User.class);
		System.out.println(list);
	}
	
	@Test
	public void testJsonStr2Map(){
		Map<?, ?> map = JsonUtil.jsonStr2Map(getFromMap().toString());
		System.out.println(map);
	}
	
	@Test
	public void testJsonStr2ObjectArray(){
		Integer[] result = {1,2,3};
		Object[] objs  = JsonUtil.jsonStr2ObjectArray(JSONArray.fromObject(result).toString());
		
		for(int i=0;i<objs.length;i++){
			System.out.println(objs[i]);
		}
	}
	

	private static User getUser() {
		User user = new User();

		user.setId(11);
		user.setName("test");
		user.setGender(true);
		user.setPrice(2.7f);
		return user;
	}

	private static List<User> getList() {
		User user = getUser();

		List<User> users = new ArrayList<User>();

		for (int i = 0; i < 10; i++) {
			users.add(user);
		}
		return users;
	}

	private static JSONArray getFromList() {

		List<User> users = getList();

		return JSONArray.fromObject(users);
	}
	
	public static JSONObject getFromMap() {

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("ua", getUser());
		map.put("list", getList());
		
		return JSONObject.fromObject(map);
	}

}
 


相關推薦

Json字串java物件

到Json的官網上http://json-lib.sourceforge.net/,下載jar包。在官網也可以看到,使用Json還需要其他的一些jar包,官網上是這樣列的: jakarta commons-lang 2.5 jakarta commons-bea

JSON解析類庫之Fastjson(1) --- Fastjson類庫學習, 生成解析json資料,json字串Java物件

JSON解析類庫之Fastjson(1) --- Fastjson基礎知識、簡單JavaBean與複雜Bean物件與JSON互轉 -- Fastjson類庫學習, 生成與解析json資料,json

fastJson中常用JSON字串Java物件

1.使用fastJson,首先引入fastJson依賴 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba<

Json字串java物件

strJson:{"address":"北京市西城區","age":"23","name":"JSON"} strArray:[{"address":"北京市西城區","age":"23","name":"JSON"}] JSON字串--》》java物件上面說明了如何把java物件轉化為JSON字串,下面看如

jsonjava物件

1、json字串轉JSON物件 //JSON的物件格式的字串 stu = {"name":"JSON","address":"北京市西城區","age":25} //使用net.sf.json包下面的JSONObject JSONObject json = JSONObject.fr

JSONJava物件 工具類

話不多說,上程式碼~import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier;

xstream--xml工具類--java物件轉換JSONObject、xmljava物件

工作環境: myeclipse2013、jdk1.8、fastjson1.1.41、xstream1.4.3 import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.Writer;

python日期模組datetime常用操作總結(字串datetime物件、日期差值計算、時間戳獲取、時間陣列生成等)

     在python中,自帶的datetime和time兩個時間模組在平時的使用中可以滿足我們絕大多數的需求,但是由於缺乏對這些模組深度的瞭解和使用,導致平時能夠使用到的時間功能十分有限,例如:對於time模組,我的使用幾乎就是停留在程式執行時間的統計和時間戳生成這

Json物件Json字串的轉化、JSON字串Java物件的轉換

1.jQuery外掛支援的轉換方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字串轉換成json物件 2.瀏覽器支援的轉換方式(Firefox,chrome,opera,safari

js中處理json Json物件Json字串的轉化、JSON字串Java物件的轉換

轉:https://www.cnblogs.com/zq-boke/p/5833387.html Json物件與Json字串的轉化、JSON字串與Java物件的轉換   一.Json物件與Json字串的轉化 1.jQuery外掛支援的轉換方式:   $.pars

JSON 字串 java 物件的轉換

//json-lib-2.2-jdk15.jar  import net.sf.json.JSONArray; import net.sf.json.JSONObject;  1. //把java 物件列表轉換為json物件陣列,並轉為字串     JSONArray array =JSONArray.fr

Json——使用Json jar包實現Json字串Java物件或集合之間的互相轉換

        總結一下利用Json相關jar包實現Java物件和集合與Json字串之間的互相轉換:        1、建立的User類:package com.ghj.packageofdomain; public class User { private int

元件使用總結:使用 JAXB 實現 XML檔案和java物件

JAXB JAXB:實現xml和java物件互轉 JAXB是一個業界的標準,實現XML檔案和Java物件的互轉。 JAXB是JDK 的組成部分。我們不需要下載第三方jar包 即可做到輕鬆轉換。 複製程式碼 重要類和介面: ○ JAXBContext類,是應用的入口,用於管理XML/Java繫結資訊。

Json字串Object物件相互轉換的幾種方式

Json-Lib、Org.Json、Jackson、Gson、FastJson五種方式轉換json型別 只列舉了最省事的方式。不涉及複製情況和速度。 測試用例,一個User類,屬性name,age,location。重寫toString()。 public class User {

JSON字串和list集合

谷歌的Gson.jar:         //list轉換為json            Gson gson = new Gson();               List<Person&g

javax.xml + java.io xml和java物件工具類

import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshall

JSON資料Java物件相互轉換

整理下json資料與Java物件轉換。 使用的jar包: ClassGrade類: import java.util.ArrayList; import java.util.List; public class ClassGrade { private String

JAXB實現XML和java物件以及soapXml和物件需要注意的地方

public class JaxbXmlUtil { private static final String DEFAULT_ENCODING = "UTF-8"; /** * pojo轉換成xml 預設編碼UTF-8 */ public static

yaml檔案java bean

轉載至    https://segmentfault.com/a/1190000007743290 yaml格式 name: demo desc: this is desc items: - name: item desc: item desc

XML字串MAP格式

 /**      * XML格式字串轉換為Map      *      * @param strXML XML字串      * @return XML資料轉換後的Map      * @thro