java中字符串和JSON對象、Bean之間的相互轉換

JSON格式用於數據傳輸、bean用於封裝數據信息、String用於展現封裝信息、json格式的內容用json工具或者之間在json.cn展現比較清晰。

1、將Sting轉爲Json

在開發中,常常是前端發送一串數據過來以後,是經過一個參數帶着一串值過來,這一串值是String 格式的,可是裏面的內容實際上是json格式類型的,因此拿到值以後就要將該值轉化成json格式,而後獲取裏面指定的key就能夠拿到該值了。前端

JSONObject jsonObject =  JSON.parseObject(tt);

這樣就能夠將一串參數轉化成json對象了,而後經過下面指定的key獲取特定的值,以下面所示java

String imei= (String) jsonObject.get("imei");

在返回數據中,要常常返回指定的json格式,我用的是以下所示:json

Map<String,Object>map=new HashMap<>();
map.put("ret",1);
map.put("ret1","no");
map.put("tag1",sh.getTOpen());
map.put("video",sh.getfOpen());
map.put("video1",sh.getVOpen());
map.put("video2",sh.getViOpen());

String json=JSON.toJSONString(map);

而後return json;就能夠了,不過通常這個值是要加密以後再上傳給前端的。segmentfault

2、fastjson的使用

一、基礎

FastJSON是一個Java語言編寫的高性能,功能完善,徹底支持http://json.org的標準的JSON庫。ide

fastJSON的使用說到底就是JSON對象、bean對象、字符串類型,三者之間的相互轉化工具

image.png

fastjson 經常使用 API:性能

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。

解析:測試

String→bean: parseObject(String text, Class<T> clazz); // 把JSON文本parse爲bean;

bean→String:toJSONString(Object object);//把bean轉換爲JSON文本

bean→JSON: toJSON(Object javaObject);//把bean轉換爲JSONObject或者JSONArray

JSON→String: toJSONString();

String→JSON:parse(String text);// 把JSON文本parse爲JSONObject或者JSONArray

JSON格式用於數據傳輸、bean用於封裝數據信息、String用於展現封裝信息、json格式的內容用json工具或者之間在json.cn展現比較清晰,加密

fastJSON 引用路徑:com.alibaba.fastjson.JSON;spa

引入依賴:

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.1.23</version>
</dependency>

示例:

/**
    
*fastJSON測試
    
*/
    
 public class Test {
    
  String userName;
  String sex;
 }

1.bean轉字符串格式

JSON.toJSONString(Object object) 這個方法很經常使用,就是轉成字符串格式

Test test = new Test();
  test.setUserName("張三");
  test.setSex("男");
System.out.print(JSON.toJSONString(test));

輸出結果:

{"sex":"男","userName":"張三"}

2.將bean轉爲JSON

將bean轉爲JSON(JSONObject格式、JSONArray格式於此相似)

Object toJSON(Object javaObject)

示例:

Test test = new Test();
test.setUserName("張三");
test.setSex("男");
//將bean轉換爲JSON
JSONObject json =  (JSONObject) JSON.toJSON(test);
System.out.print("userName:"+json.get("userName"));

輸出結果:userName:張三

3.把JSON文本parse爲JSONObject或者JSONArray

Object parse(String text);
Test test = new Test();
test.setUserName("張三");
test.setSex("男");
String str = JSON.toJSONString(test);
JSONObject jsonObj = (JSONObject) JSON.parse(str);
System.out.print("userName:"+jsonObj.get("userName"));

輸出結果:userName:張三

4.把JSON文本parse爲bean

Test test = new Test();
  test.setUserName("張三");
  test.setSex("男");
String str = JSON.toJSONString(test);
 Test testTemp =  JSON.parseObject(str,Test.class);
 System.out.print("userName:"+testTemp.getUserName());

輸出結果:userName:張三

二、序列化

序列化就是指 把JavaBean對象轉成JSON格式的字符串。

com.alibaba.fastjson.JSON提供了許多方法(多態)實現序列化。

image.png

1.基本的序列化


String objJson = JSON.toJSONString(Object object);

傳入一個對象,將對象轉成JSON字符串。

例1:將Map轉成JSON

Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
        
String mapJson = JSON.toJSONString(map);

輸出結果:

{"key1":"One","key2":"Two"}

例2:自定義JavaBean User轉成JSON。

User user = new User();
user.setUserName("李四");
user.setAge(24);    
String userJson = JSON.toJSONString(user);

輸出結果:

{"age":24,"userName":"李四"}

三、反序列化

反序列化就是把JSON格式的字符串轉化爲Java Bean對象。
com.alibaba.fastjson.JSON提供了許多方法(多態)實現反序列化。

image.png

指定Class信息反序列化。

例3:將例2反序列化。

User user1 = JSON.parseObject(userJson, User.class);
System.out.println(user1.getUserName());

輸出結果:

李四

泛型的反序列化

泛型的反序列化,使用 TypeReference 傳入類型信息。

例5:將例1反序列化。

Map<String, Object> map1 = JSON.parseObject(mapJson, new TypeReference<Map<String, Object>>(){});
System.out.println(map1.get("key1"));
System.out.println(map1.get("key2"));

輸出結果:

One
Two

JSONObject,JSONArray

JSONObject,JSONArray是JSON的兩個子類。

JSONObject至關於 Map<String, Object>
JSONArray至關於List<Object>

簡單方法示例:

例6:將Map轉成JSONObject,而後添加元素,輸出。

Map<String, Object> map = new HashMap<String, Object>();
 map.put("key1", "One");
map.put("key2", "Two");
                           
JSONObject j = new JSONObject(map);
                  
j.put("key3", "Three");
           
System.out.println(j.get("key1"));
System.out.println(j.get("key2"));
System.out.println(j.get("key3"));

例7:將List對象轉成JSONArray,而後輸出。

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");

Map<String, Object> map2 = new HashMap<String, Object>();
 map2.put("key1", "Three");
 map2.put("key2", "Four");
         
 list.add(map);
 list.add(map2);
         
 JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));
          
 for(int i=0; i<j.size(); i++){
     System.out.println(j.get(i));
 }

輸出結果:

{"key1":"One","key2":"Two"}
{"key1":"Three","key2":"Four"}

相關文章:
fastjson 的使用總結

相關文章
相關標籤/搜索