jackson json轉對象 對象轉json


一,Jackson使用示例

第1步:創建ObjectMapper對象。

創建ObjectMapper對象。它是一個可重復使用的對象。

ObjectMapper mapper = new ObjectMapper();

第2步:反序列化JSON到對象。

從JSON對象使用readValue()方法來獲取。通過JSON字符串和對象類型作為參數JSON字符串/來源。

//Object to JSON Conversion Student student = mapper.readValue(jsonString, Student.class);

第3步:序列化對象到JSON。

使用writeValueAsString()方法來獲取對象的JSON字符串表示。

//Object to JSON Conversion		 jsonString = mapper.writeValueAsString(student);

在這個例子中,我們創建一個Student類。將創建一個JSON字符串學生的詳細信息,並將其反序列化到學生的對象,然后將其序列化到JSON字符串。

    public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException {
        // 第1步:創建ObjectMapper對象。
        // 創建ObjectMapper對象。它是一個可重復使用的對象。
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";

        // 第2步:反序列化JSON到對象。
        // 從JSON對象使用readValue()方法來獲取。通過JSON字符串和對象類型作為參數JSON字符串/來源。
        //map json to student
        Student student = mapper.readValue(jsonString, Student.class);
        System.out.println(student);

        // 第3步:序列化對象到JSON。
        // 使用writeValueAsString()方法來獲取對象的JSON字符串表示。
        jsonString = mapper.writeValueAsString(student);
        System.out.println(jsonString);

    }

 

public class Student {

    private String name;
    private int age;

    public Student() {
    }

    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;
    }

    public String toString() {
        return "Student [ name: " + name + ", age: " + age + " ]";
    }
}

 

二,Jackson數據綁定

數據綁定API用於JSON轉換和使用屬性訪問或使用注解POJO(普通Java對象)。以下是它的兩個類型。

  • 簡單數據綁定 - 轉換JSON,從Java Maps, Lists, Strings, Numbers, Booleans 和 null 對象。

  • 完整數據綁定 - 轉換JSON到任何JAVA類型。

ObjectMapper讀/寫JSON兩種類型的數據綁定。數據綁定是最方便的方式是類似XML的JAXB解析器。

簡單的數據綁定

簡單的數據綁定是指JSON映射到Java核心數據類型。下表列出了JSON類型和Java類型之間的關系。

 

Sr. No. JSON 類型 Java 類型
1 object LinkedHashMap<String,Object>
2 array ArrayList<Object>
3 string String
4 complete number Integer, Long or BigInteger
5 fractional number Double / BigDecimal
6 true | false Boolean
7 null null
 
public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException {
        ObjectMapper mapper = new ObjectMapper();

        Map<String, Object> studentDataMap = new HashMap<String, Object>();
        int[] marks = { 1, 2, 3 };

        Student student = new Student();
        student.setAge(10);
        student.setName("Mahesh");
        // JAVA Object
        studentDataMap.put("student", student);
        // JAVA String
        studentDataMap.put("name", "Mahesh Kumar");
        // JAVA Boolean
        studentDataMap.put("verified", Boolean.FALSE);
        // Array
        studentDataMap.put("marks", marks);

        mapper.writeValue(new File("student3.json"), studentDataMap);
        //result student.json
        //{ 
        //   "student":{"name":"Mahesh","age":10},
        //   "marks":[1,2,3],
        //   "verified":false,
        //   "name":"Mahesh Kumar"
        //}
        studentDataMap = mapper.readValue(new File("student3.json"), Map.class);

        System.out.println(studentDataMap.get("student"));
        System.out.println(studentDataMap.get("name"));
        System.out.println(studentDataMap.get("verified"));
        System.out.println(studentDataMap.get("marks"));
    }

 

完整數據綁定

如最上面的例子的第2步

        // 第2步:反序列化JSON到對象。
        // 從JSON對象使用readValue()方法來獲取。通過JSON字符串和對象類型作為參數JSON字符串/來源。
        //map json to student
        Student student = mapper.readValue(jsonString, Student.class);
        System.out.println(student);

 

 

三,Jackson樹模型

樹模型准備JSON文件的內存樹表示。 ObjectMapper構建JsonNode節點樹。這是最靈活的方法。它類似於DOM解析器的XML。

從JSON創建樹

public static void main(String args[]) throws JsonProcessingException, IOException {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
        // 從JSON創建樹
        JsonNode rootNode = mapper.readTree(jsonString);

        // 使用相對路徑來根節點在遍歷樹,並處理該數據得到的每個節點。考慮下面的代碼片段遍歷提供的根節點的樹。
        JsonNode nameNode = rootNode.path("name");
        System.out.println("Name: " + nameNode.textValue());

        JsonNode ageNode = rootNode.path("age");
        System.out.println("Age: " + ageNode.intValue());

        JsonNode verifiedNode = rootNode.path("verified");
        System.out.println("Verified: " + (verifiedNode.booleanValue() ? "Yes" : "No"));

        JsonNode marksNode = rootNode.path("marks");
        Iterator<JsonNode> iterator = marksNode.elements();
        System.out.print("Marks: [ ");
        while (iterator.hasNext()) {
            JsonNode marks = iterator.next();
            System.out.print(marks.intValue() + " ");
        }
        System.out.println("]");
    }

 

樹到Java對象轉換

    public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException {
        ObjectMapper mapper = new ObjectMapper();

        String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
        // 從JSON創建樹
        JsonNode rootNode = mapper.readTree(jsonString);

        Student student = mapper.treeToValue(rootNode, Student.class);
        System.out.println(student);

    }

 

四,Jackson流式API

流式API讀取和寫入JSON內容離散事件。 JsonParser讀取數據,而JsonGenerator寫入數據。它是三者中最有效的方法,是最低開銷和最快的讀/寫操作。它類似於XML的Stax解析器。

  • JsonGenerator - 寫入JSON字符串。

  • JsonParser - 解析JSON字符串。

使用JsonGenerator寫入JSON

使用JsonGenerator是非常簡單的。首先使用JsonFactory.createJsonGenerator()方法創建一個JsonGenerator,並用write***()方法來寫每一個JSON值。

JsonFactory jasonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(new File("student.json"), JsonEncoding.UTF8);
jsonGenerator.writeStartObject();
// "name" : "Mahesh Kumar"
jsonGenerator.writeStringField("name", "Mahesh Kumar");


使用JsonParser 讀取JSON

使用JsonParser是非常簡單的。首先使用JsonFactory.createJsonParser()方法創建JsonParser,並使用它的nextToken()方法來讀取每個JSON字符串作為標記。檢查每個令牌和相應的過程。

JsonFactory jasonFactory = new JsonFactory();
JJsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json"));
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
   //get the current token
   String fieldname = jsonParser.getCurrentName();
   if ("name".equals(fieldname)) {
      //move to next token
      jsonParser.nextToken();
      System.out.println(jsonParser.getText());             
   }
}

 

 附錄:

  反序列化JSON到list。

  ObjectMapper mapper = new ObjectMapper();
  List<Budget> budgets = mapper.readValue(jsonString, new TypeReference<List<Budget>>() { });

 

  實例:

package com.xc.json.JackSon;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JackSon {
    public static void main(String[] args) throws Exception {
        String json = "{\"username\":\"zhangsan\",\"性別\":\"男\",\"company\":{\"companyName\":\"中華\",\"address\":\"北京\"},\"cars\":[\"蔚藍\",\"特斯拉\"],\"logList\":[{\"id\":123,\"name\":\"abc\"},{\"id\":234,\"name\":\"efff\"}]}";
        System.out.println(json);
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = mapper.readTree(json);

        // String的處理
        JsonNode usernameNode = rootNode.path("username");
        System.out.println("==username==");
        String textValue = usernameNode.textValue();
        System.out.println("textValue:" + textValue);
        String asText = usernameNode.asText();
        System.out.println("asText:" + asText);
        String username = mapper.writeValueAsString(usernameNode);
        System.out.println("username:" + username);

        // 轉換成類型,Map類型,同樣Integer,String,List,也可以同樣處理
        JsonNode companyNode = rootNode.path("company");
        String company = mapper.writeValueAsString(companyNode);
        Map<String, Object> companyMap = mapper.readValue(company, Map.class);
        System.out.println("==company==");
        System.out.println(companyMap);

        // 數組的處理
        JsonNode carsNode = rootNode.path("cars");
        System.out.println("==cars==");
        Iterator<JsonNode> iterator = carsNode.elements();
        System.out.print("cars: [ ");
        while (iterator.hasNext()) {
            JsonNode marks = iterator.next();
            System.out.print(marks.textValue() + " ");
        }
        System.out.println("]");

        // 轉換成List<Log>,類型
        JsonNode logListNode = rootNode.path("logList");
        String logJson = mapper.writeValueAsString(logListNode);
        JavaType logType = mapper.getTypeFactory().constructParametricType(List.class, Log.class);
        List<Log> logList = mapper.readValue(logJson, logType);
        System.out.println("==logList==");
        System.out.println(logList);

    }
}

 

package com.xc.json.JackSon;

class Log {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "log [id=" + id + ", name=" + name + "]";
    }

}

 

 

jackson-api:

http://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM