AdSense

網頁

2019/4/29

Java 物件轉JSON字串 by Gson

使用Gson函式庫把Java物件轉為json字串的方式如下。

本篇介紹是用Gson來轉換,或是你也可以改用Jaskson函式庫來轉。

在Maven專案的pom.xml加入以下依賴。

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

使用Gson.toJson(Object src)轉Java物件為json字串範例:

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    
    public static void main(String[] args) {

        User user = genUser(); // 取得Java物件
        
        Gson gson = new Gson();
        String jsonString = gson.toJson(user);
        System.out.println(jsonString); // 印出沒排版的
        
        Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
    
        String prettyJsonString = gsonPretty.toJson(user);
        System.out.println(prettyJsonString); // 印出有排版的
    }
    
    private static User genUser() {
        Item item1 = new Item();
        item1.setId(101);
        item1.setName("筆記型電腦");
        item1.setQty(1);
        
        Item item2 = new Item();
        item2.setId(102);
        item2.setName("24吋LCD螢幕");
        item2.setQty(1);
        
        List<Item> itemList1 = new ArrayList<>();
        itemList1.add(item1);
        itemList1.add(item2);
        
        Order order1 = new Order();
        order1.setId(100001);
        order1.setItemList(itemList1);
        
        List<Order> orderList1 = new ArrayList<>();
        orderList1.add(order1);
        
        User user = new User();
        user.setId(1);
        user.setName("肉豬");
        user.setOrderList(orderList1);
        return user;
    }
    
}

class User {

    private Integer id;
    private String name;
    private List<Order> orderList;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Order> getOrderList() {
        return orderList;
    }
    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    // 省略getter/setter
}

class Order {
    private Integer id;
    private List<Item> itemList;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public List<Item> getItemList() {
        return itemList;
    }
    public void setItemList(List<Item> itemList) {
        this.itemList = itemList;
    }

    // 省略getter/setter
}

class Item {
    private Integer id;
    private Integer qty;
    private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getQty() {
        return qty;
    }
    public void setQty(Integer qty) {
        this.qty = qty;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    // 省略getter/setter
}

印出結果如下。

{"id":1,"name":"肉豬","orderList":[{"id":100001,"itemList":[{"id":101,"qty":1,"name":"筆記型電腦"},{"id":102,"qty":1,"name":"24吋LCD螢幕"}]}]}
{
  "id": 1,
  "name": "肉豬",
  "orderList": [
    {
      "id": 100001,
      "itemList": [
        {
          "id": 101,
          "qty": 1,
          "name": "筆記型電腦"
        },
        {
          "id": 102,
          "qty": 1,
          "name": "24吋LCD螢幕"
        }
      ]
    }
  ]
}

從以上結果來看,物件中的物件也會轉成json格式。


參考:

沒有留言:

AdSense