fastjson的JSONArray和JSONObject

轉自: http://blog.csdn.net/tangerr/article/details/76217924java

Fastjson是國內著名的電子商務互聯網公司阿里巴巴內部開發的用於java後臺處理json格式數據的一個工具包,包括「序列化」和「反序列化」兩部分,它具有以下特徵

1. 速度最快,測試代表,fastjson具備極快的性能,超越任其餘的java json parser。包括自稱最快的jackson。
2. 功能強大,徹底支持java bean、集合、Map、日期、Enum,支持範型,支持自省。
3. 無依賴,可以直接運行在Java SE 5.0以上版本
4. 支持Android。
5. 這是fastJson的網址:http://code.alibabatech.com/wiki/display/FastJSON/Overview其中包含了json數據處理的教程,jar下載地址,example樣例等

JSONObject 與JSONArray

  • JSONObject
json對象,就是一個鍵對應一個值,使用的是大括號{ },如:{key:value}
  • JSONArray
json數組,使用中括號[ ],只不過數組裏面的項也是json鍵值對格式的

Json對象中是添加的鍵值對,JSONArray中添加的是Json對象

例子
/** * Created by wanggs on 2017/7/27. */ public class JsonTest { public static void main(String[] args) { // Json對象中是添加的鍵值對,JSONArray中添加的是Json對象 JSONObject jsonObject = new JSONObject(); JSONObject jsonObject1 = new JSONObject(); JSONArray jsonArray = new JSONArray(); jsonObject1.put("001","tom"); // JSONObject 對象中添加鍵值對 jsonObject.put("key","value"); // 將JSONObject對象添加到json數組中 jsonArray.add(jsonObject); jsonArray.add(jsonObject1); System.out.println(jsonArray.toString()); // 輸出結果: [{"key":"value"},{"001":"tom"}] } }

 


package com.wanggs.com.wanggs.json.fastjson; import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; /** * Created by wanggs on 2017/7/27. */ public class FastJsonTest { public static void main(String[] args) { Group group = new Group(); group.setId(0); group.setName("admin"); User user = new User(); user.setId(001); user.setName("guest"); User user1 = new User(); user1.setId(002); user1.setName("root"); List<User> users = new ArrayList<User>(); users.add(user); users.add(user1); group.setUsers(users); String json = JSON.toJSONString(group); System.out.println(json); // 輸出: {"id":0,"name":"admin","users":[{"id":1,"name":"guest"},{"id":2,"name":"root"}]} } }

下面給出fastJson處理json數據格式的代碼樣例:

package test.com.wanggs.com.wanggs.json.fastjson; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.wanggs.com.wanggs.json.fastjson.People; import org.junit.Test; import static org.junit.Assert.*; /** * Created by wanggs on 2017/7/27. */ public class FastJsonTestTest { /** * 序列化 */ @Test public void toJsonString() { People people = new People("001","tom",12); String text = JSON.toJSONString(people); System.out.println(text); // 輸出結果: {"age":12,"id":"001","name":"tom"} } /** * 反序列爲Json對象 */ @Test public void parseJsonObject(){ String text = "{\"age\":12,\"id\":\"001\",\"name\":\"tom\"}"; People people = (People) JSON.parseObject(text,People.class); System.out.println("parseBeanObject()方法:people==" + people.getId() + "," + people.getName() + "," + people.getAge()); // 輸出結果爲: parseBeanObject()方法:people==001,tom,12 } /** * 將javaBean轉化爲json對象 */ @Test public void bean2Json(){ People people = new People("002","jack",23); JSONObject jsonObject = (JSONObject) JSON.toJSON(people); System.out.println("bean2Json()方法:jsonObject==" + jsonObject); // 輸出結果: bean2Json()方法:jsonObject=={"name":"jack","id":"002","age":23} } /** * 全序列化 直接把java bean序列化爲json文本以後,可以按照原來的類型反序列化回來。支持全序列化,須要打開SerializerFeature.WriteClassName特性 */ @Test public void parseJSONAndBeanEachother(){ People people = new People("002","jack",23); SerializerFeature[] featureArr = { SerializerFeature.WriteClassName }; String text = JSON.toJSONString(people, featureArr); System.out.println("parseJSONAndBeanEachother()方法:text==" + text); // 輸出結果:parseJSONAndBeanEachother()方法:text=={"@type":"com.wanggs.com.wanggs.json.fastjson.People","age":23,"id":"002","name":"jack"} People people1 = (People) JSON.parse(text); System.out.println("parseJSONAndBeanEachother()方法:People==" + people1.getId() + "," + people1.getName() + "," + people1.getAge()); // 輸出結果:userObj==testFastJson001,maks,105 } }
附:javaBean類People.java
package com.wanggs.com.wanggs.json.fastjson; /** * Created by wanggs on 2017/7/27. */ public class People { private String id; private String name; private int age; public People() { } public People(String id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

 

在深刻Json

package test.com.wanggs.com.wanggs.json.fastjson; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.wanggs.com.wanggs.json.fastjson.Address; import com.wanggs.com.wanggs.json.fastjson.People; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; /** * Created by wanggs on 2017/7/27. */ public class FastJsonTest1Test { /** * 數組轉json字符串 */ @Test public void array2Json() { String[] arr = {"bill", "green", "maks", "jim"}; String jsonText = JSON.toJSONString(arr); System.out.println("array2Json()方法:jsonText==" + jsonText); // 輸出結果:jsonText==["bill","green","maks","jim"] } /** * json格式字符串轉數組 */ @Test public void json2Array() { String jsonText = "[\"bill\",\"green\",\"maks\",\"jim\"]"; JSONArray jsonArray = JSON.parseArray(jsonText); System.out.println("json2Array()方法:jsonArray==" + jsonArray); // 輸出結果:jsonArray==["bill","green","maks","jim"] } /** * 數組轉json格式字符串 */ @Test public void array2Json2() { People people = new People("001", "tom", 12); People people1 = new People("002", "jack", 23); People people2 = new People("003", "mair", 22); People[] peoples = new People[]{people, people1, people2}; String jsonText = JSON.toJSONString(peoples); System.out.println("array2Json2()方法:jsonText==" + jsonText); //輸出結果:array2Json2()方法:jsonText==[{"age":12,"id":"001","name":"tom"},{"age":23,"id":"002","name":"jack"},{"age":22,"id":"003","name":"mair"}] } /** * json格式字符串轉數組 */ @Test public void json2Array2() { String jsonText = "[{\"age\":12,\"id\":\"001\",\"name\":\"tom\"},{\"age\":23,\"id\":\"002\",\"name\":\"jack\"},{\"age\":22,\"id\":\"003\",\"name\":\"mair\"}]"; JSONArray jsonArr = JSON.parseArray(jsonText); System.out.println("json2Array2()方法:jsonArr==" + jsonArr); // 輸出結果:json2Array2()方法:jsonArr==[{"name":"tom","id":"001","age":12},{"name":"jack","id":"002","age":23},{"name":"mair","id":"003","age":22}] } /** * list集合轉json格式字符串 */ @Test public void list2Json() { List<People> list = new ArrayList<People>(); list.add(new People("001", "tom", 12)); list.add(new People("002", "jack", 23)); list.add(new People("003", "mair", 22)); String jsonText = JSON.toJSONString(list); System.out.println("list2Json()方法:jsonText==" + jsonText); // 輸出的結果爲: [{"age":12,"id":"001","name":"tom"},{"age":23,"id":"002","name":"jack"},{"age":22,"id":"003","name":"mair"}] } /** * map轉json格式字符串 */ @Test public void map2Json() { Map map = new HashMap(); Address address1 = new Address("廣東省","深圳市","科苑南路","580053"); map.put("address1", address1); Address address2 = new Address("江西省","南昌市","陽明路","330004"); map.put("address2", address2); Address address3 = new Address("陝西省","西安市","長安南路","710114"); map.put("address3", address3); String jsonText = JSON.toJSONString(map, true); System.out.println("map2Json()方法:jsonText=="+jsonText); //輸出結果:jsonText=={"address1":{"city":"深圳市","post":"580053","province":"廣東省","street":"科苑南路"},"address2":{"city":"南昌市","post":"330004","province":"江西省","street":"陽明路"},"address3":{"city":"西安市","post":"710114","province":"陝西省","street":"長安南路"}} } /** * json轉map */ @Test public void json2Map(){ String text = "{\"age\":12,\"id\":\"001\",\"name\":\"tom\"}"; Map<String,Object> map = JSON.parseObject(text); System.out.println("json2Map()方法:map=="+map); //輸出結果:{"name":"tom","id":"001","age":12} Set<String> set = map.keySet(); for(String key : set){ System.out.println(key+"--->"+map.get(key)); } } }

 

技巧

package com.wanggs.com.wanggs.json.fastjson; import com.alibaba.fastjson.JSON; /** * Created by wanggs on 2017/7/27. */ public class CustomText { /** * touser : OPENID * msgtype : text * text : {"content":"Hello World"} */ //{"msgtype":"text","text":{"content":"Hello World"},"touser":"OPENID"} private String touser; private String msgtype; private TextBean text; public static class TextBean { /** * content : Hello World */ private String content; public String getContent() { return content; } public void setContent(String content) { this.content = content; } } public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getMsgtype() { return msgtype; } public void setMsgtype(String msgtype) { this.msgtype = msgtype; } public TextBean getText() { return text; } public void setText(TextBean text) { this.text = text; } } class Test{ public static void main(String[] args) { CustomText customText = new CustomText(); customText.setTouser("OPENID"); customText.setMsgtype("text"); CustomText.TextBean textBean = new CustomText.TextBean(); textBean.setContent("Hello World"); customText.setText(textBean); String json = JSON.toJSONString(customText); System.out.println(json); //{"msgtype":"text","text":{"content":"Hello World"},"touser":"OPENID"} } /** * { "touser":"OPENID", "msgtype":"text", "text": { "content":"Hello World" } } */ } 

概括六種方式json轉map

package com.wanggs.com.wanggs.json.fastjson; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.util.Map; import java.util.Set; /** * Created by wanggs on 2017/7/27. */ public class FastJsonTest1 { public static void main(String[] args) { String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}"; //第一種方式 Map maps = (Map)JSON.parse(str); System.out.println("這個是用JSON類來解析JSON字符串!!!"); for (Object map : maps.entrySet()){ System.out.println(((Map.Entry)map).getKey()+" " + ((Map.Entry)map).getValue()); } //第二種方式 Map mapTypes = JSON.parseObject(str); System.out.println("這個是用JSON類的parseObject來解析JSON字符串!!!"); for (Object obj : mapTypes.keySet()){ System.out.println("key爲:"+obj+"值爲:"+mapTypes.get(obj)); } //第三種方式 Map mapType = JSON.parseObject(str,Map.class); System.out.println("這個是用JSON類,指定解析類型,來解析JSON字符串!!!"); for (Object obj : mapType.keySet()){ System.out.println("key爲:"+obj+"值爲:"+mapType.get(obj)); } //第四種方式 /** * JSONObject是Map接口的一個實現類 */ Map json = (Map) JSONObject.parse(str); System.out.println("這個是用JSONObject類的parse方法來解析JSON字符串!!!"); for (Object map : json.entrySet()){ System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue()); } //第五種方式 /** * JSONObject是Map接口的一個實現類 */ JSONObject jsonObject = JSONObject.parseObject(str); System.out.println("這個是用JSONObject的parseObject方法來解析JSON字符串!!!"); for (Object map : json.entrySet()){ System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue()); } //第六種方式 /** * JSONObject是Map接口的一個實現類 */ Map mapObj = JSONObject.parseObject(str,Map.class); System.out.println("這個是用JSONObject的parseObject方法並執行返回類型來解析JSON字符串!!!"); for (Object map: json.entrySet()){ System.out.println(((Map.Entry)map).getKey()+" "+((Map.Entry)map).getValue()); } String strArr = "{{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}," + "{\"00\":\"zhangsan\",\"11\":\"lisi\",\"22\":\"wangwu\",\"33\":\"maliu\"}}"; // JSONArray.parse() System.out.println(json); } }
package com.wanggs.com.wanggs.json.fastjson; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.*; /** * Created by wanggs on 2017/7/27. */ public class FastJsonTest { public static void main(String[] args) { String json = "[{\"id\":1,\"type\":\"cycle\",\"attribute\":{\"center\":\"(10.4, 123.345)\", \"radius\":67.4}},{\"id\":2,\"type\":\"polygon\",\"attribute\":[{\"vertex\":\"(10.4, 133.345)\"}, {\"vertex\":\"(10.4, 143.345)\"}]}]"; JSONArray array = JSON.parseArray(json); System.out.println(array.getJSONObject(0).getJSONObject("attribute").get("center")); System.out.println(array.getJSONObject(1).getJSONArray("attribute").getJSONObject(1).get("vertex")); // 輸出結果爲: (10.4, 123.345) (10.4, 143.345) } } 

方法總結

java和js中JSONObject,JSONArray,Map,String之間轉換——持續更新中android

4.JSONObject、JSONArray,Map轉String 
JSONObject——String: 
System.out.println(myJsonObject);//可直接輸出JSONObject的內容 
myJsonObject.toString(); 
JSONArray——String: 
System.out.println(myJsonArray);//可直接輸出myJsonArray的內容 
myJsonArray.toString(); 
Map——String: 
System.out.println(map);//可直接輸出map的內容 
map.toString();json

5.JSONObject轉JSONArray數組

JSONObject myJson = JSONObject.fromObject(jsonString);

Map m = myJson;工具

7.JSONArray轉JSONObject 
for(int i=0 ; i < myJsonArray.length() ;i++) 

//獲取每個JsonObject對象 
JSONObject myjObject = myJsonArray.getJSONObject(i);post

}性能

8.JSONArray轉Map測試

9.Map轉JSONObject 
JSONObject json = JSONObject.fromObject( map );this

10.Map轉JSONArray 
JSONArray.fromObject(map);spa

11.List轉JSONArray JSONArray jsonArray2 = JSONArray.fromObject( list );

相關文章
相關標籤/搜索