1. 程式人生 > >【Java】——Json反序列化為Java物件

【Java】——Json反序列化為Java物件

【專案需求】

   最近做專案的時候,功能是將一個表單和一個datagrid中的集合中的資料一起傳到後臺去,也就是將接送。

【思路】

  1、在之前做過的功能中,我們用過@requestMap來接收傳過來的list物件集合,所以我也想用這種方法去接收。於是將我的jsonStr拼接到url中。將form表單物件值放到data中。嘗試之後,發現無法接收,因為傳遞過來的是一個字串。

 2、用字串接收,然後在後臺去解析。

   我知道可以用split函式去解析它,但是不想用它,想用一個簡單的方法,它可以直接轉換為後臺的list物件集合。然後再迴圈遍歷儲存到資料庫中。

【關鍵程式碼】

  1. List<Point> points = new
     ArrayList<Point>();  
  2. ObjectMapper om = new ObjectMapper();  
  3. JsonNode node=om.readTree(jsonStr);  
  4. points= (List<Point>) om.readValue(node.toString(), new TypeReference<List<Point>>() {});  

【總結】

 有些問題,只要我們想要去解決,就一定能夠解決掉的。下面是上網查到的一些資料,希望對大家有所幫助!

 1、實體物件

Java程式碼  
  1. package
     com.boonya.gps;  
  2. import java.io.Serializable;  
  3. import org.codehaus.jackson.annotate.JsonProperty;  
  4. public class Point implements Serializable{  
  5.     private static final long serialVersionUID = -8359918523259373062L;  
  6.     private double lat;  
  7.     private double lng;  
  8.     public double getLat() {  
  9.         return lat;  
  10.     }  
  11.     public Point(@JsonProperty("lat"double lat,@JsonProperty("lng"double lng) {  
  12.         this.lat = lat;  
  13.         this.lng = lng;  
  14.     }  
  15.     public void setLat(double lat) {  
  16.         this.lat = lat;  
  17.     }  
  18.     public double getLng() {  
  19.         return lng;  
  20.     }  
  21.     public void setLng(double lng) {  
  22.         this.lng = lng;  
  23.     }  
  24.     @Override  
  25.     public String toString() {  
  26.         return "Point(lat,lng)="+" {lat:"+lat+","+"lng:"+lng+"}";  
  27.     }  
  28. }  

2、實現JSON資料反序列化為Java物件

Java程式碼  
  1. package com.boonya.gps;  
  2. import java.io.IOException;  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import org.codehaus.jackson.JsonGenerationException;  
  6. import org.codehaus.jackson.JsonNode;  
  7. import org.codehaus.jackson.JsonParseException;  
  8. import org.codehaus.jackson.JsonProcessingException;  
  9. import org.codehaus.jackson.map.JsonMappingException;  
  10. import org.codehaus.jackson.map.ObjectMapper;  
  11. import org.codehaus.jackson.type.TypeReference;  
  12. /** 
  13.  * JSON資料反序列化為Java物件或物件集合 
  14.  * @author [email protected] 
  15.  * @date  2013-8-28 
  16.  */  
  17. public class JSONSeriaToObject {  
  18.     /** 
  19.      * 物件轉JSON 
  20.      * @param obj 
  21.      * @return 
  22.      */  
  23.     public  String getJsonFromObject(Object obj){  
  24.         ObjectMapper om = new ObjectMapper();  
  25.         try {  
  26.             return om.writeValueAsString(obj);  
  27.         } catch (JsonGenerationException e) {  
  28.             e.printStackTrace();  
  29.         } catch (JsonMappingException e) {  
  30.             e.printStackTrace();  
  31.         } catch (IOException e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.         return "";  
  35.     }  
  36.     /** 
  37.      * JSON發序列化為Java物件 
  38.      * @param jsonStr 
  39.      * @return 
  40.      */  
  41.     public  Point  getPointByJsonString(String jsonStr){  
  42.         Point point =null;  
  43.         ObjectMapper om = new ObjectMapper();  
  44.         try {  
  45.             JsonNode node=om.readTree(jsonStr);  
  46.             point= (Point) om.readValue(node.toString(),Point.class);  
  47.         } catch (JsonParseException e) {  
  48.             e.printStackTrace();  
  49.         } catch (JsonMappingException e) {  
  50.             e.printStackTrace();  
  51.         } catch (JsonGenerationException e) {  
  52.             e.printStackTrace();  
  53.         } catch (IOException e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.         System.out.println("<:success single point:>"+point.toString());  
  57.         return point;  
  58.     }  
  59.     /** 
  60.      * 拼接Json資料的字串轉化為標準Json格式字串 
  61.      * @param str 
  62.      * @return 
  63.      */  
  64.     public  String  getJsonNodeStringByString(String str){  
  65.         ObjectMapper om = new ObjectMapper();  
  66.         try {  
  67.             JsonNode node=om.readTree(str);  
  68.             return node.toString();  
  69.         } catch (JsonProcessingException e) {  
  70.             e.printStackTrace();  
  71.         } catch (IOException e) {  
  72.             e.printStackTrace();  
  73.         }  
  74.         return "";  
  75.     }  
  76.     /** 
  77.      * JSON發序列化為Java物件集合 
  78.      * @param jsonStr 
  79.      * @return 
  80.      */  
  81.     @SuppressWarnings("unchecked")  
  82.     public  List<Point>  getPointsByJsonString(String jsonStr){  
  83.         List<Point> points = new ArrayList<Point>();  
  84.         ObjectMapper om = new ObjectMapper();  
  85.         try {  
  86.             JsonNode node=om.readTree(jsonStr);  
  87.             points= (List<Point>) om.readValue(node.toString(), new TypeReference<List<Point>>() {});  
  88.         } catch (JsonParseException e) {  
  89.             e.printStackTrace();  
  90.         } catch (JsonMappingException e) {  
  91.             e.printStackTrace();  
  92.         } catch (JsonGenerationException e) {  
  93.             e.printStackTrace();  
  94.         } catch (IOException e) {  
  95.             e.printStackTrace();  
  96.         }  
  97.         for (int i = 0; i < points.size(); i++) {  
  98.             System.out.println("<:success index "+i+":>"+points.get(i).toString());  
  99.         }  
  100.         return points;  
  101.     }  
  102.     /** 
  103.      * JSON資料反序列化為Java物件的測試入口 
  104.      * @param args 
  105.      * @throws JsonGenerationException 
  106.      * @throws JsonMappingException 
  107.      * @throws IOException 
  108.      */  
  109.     public static void main(String[] args) throws JsonGenerationException,JsonMappingException, IOException {  
  110.         JSONSeriaToObject jsto=new JSONSeriaToObject();  
  111.         //原始資料格式  
  112.         System.out.println("----------------------------------Jackson JSON(list<T>)  to Java  Object-----------------------------");   
  113.         List<Point> points = new ArrayList<Point>();  
  114.         points.add(new Point(34.2332,104.46664));  
  115.         String json=jsto.getJsonFromObject(points);  
  116.         System.out.println(json);  
  117.         //JSON序列化Java物件  
  118.         jsto.getPointsByJsonString(json);  
  119.         System.out.println("----------------------------------Jackson JSON(T)  to Java  Object-----------------------------");  
  120.         Point point=new Point(34.5332,104.76664);  
  121.         String json2=jsto.getJsonFromObject(point);  
  122.         System.out.println(json2);  
  123.         //JSON序列化Java物件  
  124.         jsto.getPointByJsonString(json2);  
  125.         //JSON序列化為Java物件  
  126.         System.out.println("----------------------------------Ping string JSON  to Java  Object-----------------------------");  
  127.         String latlngs =new String("[{\"lat\":34.232013,\"lng\":103.466002},{\"lat\":34.531939,\"lng\":103.665816}]");  
  128.         //經測試以下資料若呼叫getJsonFromObject是不行的會產生異常  
  129.         String json3=jsto.getJsonNodeStringByString(latlngs);  
  130.         System.out.println(json3);  
  131.         //JSON序列化Java物件  
  132.         jsto.getPointsByJsonString(json3);  
  133.     }  
  134. }  

3、列印結果

Java程式碼  
  1. ----------------------------------Jackson JSON(list<T>)  to Java  Object-----------------------------  
  2. [{"lat":34.2332,"lng":104.46664}]  
  3. <:success index 0:>Point(lat,lng)= {lat:34.2332,lng:104.46664}  
  4. ----------------------------------Jackson JSON(T)  to Java  Object-----------------------------  
  5. {"lat":34.5332,"lng":104.76664}  
  6. <:success single point:>Point(lat,lng)= {lat:34.5332,lng:104.76664}  
  7. ----------------------------------Ping string JSON  to Java  Object-----------------------------  
  8. [{"lat":34.232013,"lng":103.466002},{"lat":34.531939,"lng":103.665816}]  
  9. <:success index 0:>Point(lat,lng)= {lat:34.232013,lng:103.466002}  
  10. <:success index 1:>Point(lat,lng)= {lat:34.531939,lng:103.665816

相關推薦

Java——Json序列化為Java物件

【專案需求】    最近做專案的時候,功能是將一個表單和一個datagrid中的集合中的資料一起傳到後臺去,也就是將接送。 【思路】   1、在之前做過的功能中,我們用過@requestMap來接收

MongoDB C#:如何將包含DateTime的JSON序列化為正確的BsonDocument DateTime值

目錄 介紹 背景 使用程式碼 興趣點 如果您的Json包含日期時間值如“2018-11-23T20:56:05.3117673Z”並且您需要將其作為正確的BsonDateTime值放在BsonDocument中,該怎麼辦? 介紹 這是我的第一篇文章,最後我發現了一

JSON字串序列化為MAP物件開發例項

import java.util.Map; import org.apache.log4j.Logger; import flexjson.JSONDeserializer; /**  * json反序列化  * @author Administrator  *  */ p

JavaJava物件序列化/序列化為JSON,並寫入redis

RedisUtil類和spring_config.xml配置檔案在這篇文章:【Redis】Spring整合Redis  中給出了,這裡不再贅述。① 依賴匯入 <!-- fastjson -->

Java c# 跨語言Json序列化首字母大小寫問題

跨語言 大小 lca clas nbsp 反序列化 val ngs 標準 C#標準是首字母大寫,Java規範是首字母小寫,在序列化成Json之後,反序列化會出現反序列化失敗的問題。。 從C#反序列化成JavaBean的時候通過如下註解可以直接解決該問題 @JsonNa

Golang如何不序列化為前提的情況下,修改ProtoBuffer某個Tag的值

刪除 tag mage msg 挑戰 客戶 Golan protobuff 直接 當你從客戶端接收到一串序列化後的數據,你需要   - 修改其中某一個標簽的值,然後把它傳遞到真正的業務數據,這樣每個業務模塊(微服務)就不需要和公共授權服務打交道了。   - 因為傳

Java json序列

package com.nuanshui.frms.exchange.utils; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException

javajson和list互相轉化工具類

import java.util.List; import net.sf.json.JSONArray; public class JsonListUtil { /** * Li

spring mvc接收ajax提交的JSON數據,並序列化為對象

ucc clas resp 格式 字符 序列 設定 ati res 需求:spring mvc接收ajax提交的JSON數據,並反序列化為對象,代碼如下: 前臺JS代碼: //屬性要與帶轉化的對象屬性對應 var param={name:‘語文‘,price:16

exe4j如何利用exe4j把java桌面程序生成exe文件

第三方類 arr article 位置 程序 文件 相同 ips uid 前言: 我們都知道Java可以將二進制程序打包成可執行jar文件,雙擊這個jar和雙擊exe效果是一樣一樣的,但感覺還是不同。其實將java程序打包成exe也需要這個可執行jar文件。 準備:

Apache Avro 序列化與序列化 (Java 實現)

Avro像兩個交流一樣要找一個互相能理解的語言, 在國內為普通話, 跑國外多用英語相通, 兩個進程間通信也需要找一個大家都能理解的數據格式. 簡單的如 JSON, XML, 那是自我描述性格式, XML 有 Schema 定義, 但尚無正式的 JSON Schema 規範. 在講求效率的場合, 純文本式的數據

溫故知新從零開始搭建 java web項目(二)

添加 以及 pro tps ren 處理方法 獲取 mapping 映射 系列一介紹了新建一個 web 項目的基本步驟,系列二就準備介紹下基本的 jsp 和 servlet 使用。 (關於jsp的編譯指令、動作指令、內置對象不在本文討論範圍之內) 1. 首先,在 pom.

為什麽說 Java 程序員必須掌握 Spring Boot ?

netbeans 好想 模式 大學 evel 完成 客戶 star 打破 Spring Boot 2.0 的推出又激起了一陣學習 Spring Boot 熱,那麽, Spring Boot 誕生的背景是什麽?Spring 企業又是基於什麽樣的考慮創建 Spring Boot

Java使用IDEA遠端除錯Java程式碼 JavaMaven Tomcat外掛使用

概述   服務端程式執行在一臺遠端伺服器上,我們可以在本地服務端的程式碼(前提是本地的程式碼必須和遠端伺服器執行的程式碼一致)中設定斷點,每當有請求到遠端伺服器時時能夠在本地知道遠端服務端的此時的內部狀態 測試專案   建立方式參考:【Java】Maven Tomcat外掛使用   專案中新增了一個測

LeetCode14. Longest Common Prefix - Java實現

文章目錄 1. 題目描述: 2. 思路分析: 3. Java程式碼: 1. 題目描述: Write a function to find the longest common prefix string amongst an arr

LeetCode13. Roman to Integer - Java實現

文章目錄 1. 題目描述: 2. 思路分析: 3. Java程式碼: 1. 題目描述: Roman numerals are represented by seven different symbols: I, V, X, L, C

LeetCode12. Integer to Roman - Java實現

文章目錄 1. 題目描述: 2. 思路分析: 3. Java程式碼: 1. 題目描述: Roman numerals are represented by seven different symbols: I, V, X, L, C

LeetCode10. Regular Expression Matching - Java實現

文章目錄 1. 題目描述: 2. 思路分析: 3. Java程式碼: 1. 題目描述: Given an input string (s) and a pattern (p), implement regular expressio

Java RMI & 序列化 詳細介紹

https://blog.csdn.net/LeeHDsniper/article/details/71599504 Java RMI 一直只是知道,瞭解過,還是很迷,耐心看了一篇文章,瞭解了RMI究竟是什麼(雖然都知道他是遠端呼叫用到的) ,還有大致的利用思路。 因為沒辦法複製圖片,後邊的直接

ACMHDU 1008 Elevator(for java)

到達每一個站點才會停,而不是到達每一個樓層都停! import java.util.Arrays; import java.util.Scanner; public class Main { static int upFloor = 6; static int downFlo