Java中將JSON格式的資料轉換成對應的Bean、Map、List資料
阿新 • • 發佈:2019-01-26
簡單說明:
為了方便資料在客戶端及伺服器端的傳輸,有時候我們會用一些比較方便組織的資料型別,比如json、xml等傳給客戶端,客戶端也可以重新組織資料傳回伺服器端。JSON和XML提供了一套比較方便的資料組織形式。。並且有很多現成的類庫用於解析這些資料。。
本文是對net.sf.json使用後的總結。。目前官方開源的對json進行處理的專案很多,fastjson還有其它等等。。視自己處理問題的複雜程度考慮選擇使用不同的依賴包。。
如果使用maven構建專案,需要對以下兩個包進行依賴
- <dependency>
-
<groupId>net.sf.json-lib
- <artifactId>json-lib</artifactId>
- <version>2.2.3</version>
- </dependency>
- <dependency>
- <groupId>xom</groupId>
- <artifactId>xom</artifactId>
- <version>1.2.5</version>
- </dependency>
示例程式:
1.將JSON組裝的實體資料型別轉換為Java中對應的簡單Bean物件(只包含簡單的資料型別)
- /**
- * 將json格式封裝的簡單實體型別資料轉換成簡單型別的javabean
- * @return
- */
- privatestatic Object JSON2SimpleBean() {
- String jsonStr = "{\"age\":23,\"id\":123,\"name\":\"tt_2009\"," +
- "\"province\":\"上海\",\"sex\":\"男\"}";
-
JSONObject jsonBean = JSONObject.fromObject(jsonStr);
- return JSONObject.toBean(jsonBean, SimpleUser.class);
- }
2.將JSON組裝的複雜資料轉換成複雜的java資料實體(物件中包含其它複雜物件,如收貨地址用List儲存)
- /**
- * 將json格式封裝的複雜實體資料轉換成複雜型別的javabean
- * @return
- */
- privatestatic Object JSON2ComplexBean() {
- String jsonStr = "{\"address\":[\"北京\",\"上海\",\"廣州\"]," +
- "\"age\":23,\"id\":123,\"name\":\"tt_2009\",\"province\":\"上海\",\"sex\":\"男\"}";
- JSONObject jsonBean = JSONObject.fromObject(jsonStr);
- return JSONObject.toBean(jsonBean, ComplexUser.class);
- }
3.將Json資料轉換成java中的List
- /**
- * 將json格式封裝的列表資料轉換成java的List資料
- * @return
- */
- privatestatic Object JSON2List() {
- String jsonArray =
- "[{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}," +
- "{\"age\":24,\"id\":123,\"name\":\"tt_2009_1\",\"province\":\"上海\",\"sex\":\"男\"}," +
- "{\"age\":32,\"id\":123,\"name\":\"tt_2009_9\",\"province\":\"上海\",\"sex\":\"男\"}]";
- return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig());
- }
4.將json資料轉換成java中的Map。(注意key只能是字串)
- /**
- * 將json格式封裝的字串資料轉換成java中的Map資料
- * @return
- */
- privatestatic Map<String, SimpleUser> JSON2Map() {
- Map<String, SimpleUser> map = new HashMap<String, SimpleUser>();
- String jsonMapStr =
- "{\"tt_2009_4\":{\"age\":27,\"id\":123,\"name\":\"tt_2009_4\",\"province\":\"上海\",\"sex\":\"男\"}," +
- "\"tt_2009_6\":{\"age\":29,\"id\":123,\"name\":\"tt_2009_6\",\"province\":\"上海\",\"sex\":\"男\"}," +
- "\"tt_2009_0\":{\"age\":23,\"id\":123,\"name\":\"tt_2009_0\",\"province\":\"上海\",\"sex\":\"男\"}}";
- JSONObject jsonMap = JSONObject.fromObject(jsonMapStr);
- Iterator<String> it = jsonMap.keys();
- while(it.hasNext()) {
- String key = (String) it.next();
- SimpleUser u = (SimpleUser) JSONObject.toBean(
- JSONObject.fromObject(jsonMap.get(key)),
- SimpleUser.class);
- map.put(key, u);
- }
- return map;
- }
附錄程式碼:
(setter、getter等方法省略掉了)
- /**
- * 只包含基本資料型別的簡單實體類
- * @author TT_2009
- */
- publicclass SimpleUser {
- privateint id;
- private String name;
- private String sex;
- privateint age;
- private String province;
- }
- /**
- * 包含複雜型別的實體類
- * @author TT_2009
- */
- publicclass ComplexUser extends SimpleUser {
- private List<String> address;
- public ComplexUser() {
- }
- public ComplexUser(int id, String name,
- String sex, int age, String province,
- List<String> address) {
- super(id, name, sex, age, province);
- this.address = address;
- }
- public List<String> getAddress() {
- return address;
- }
- publicvoid setAddress(List<String> address) {
- this.address = address;
- }
- }