一、JSON結構體
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於閱讀和編寫。JSON結構體由兩種類型的值構成:簡單值和對象。
簡單值可以是數字、布爾值、字元串、null。一個字元串是由雙引號包裹的文本,由於JavaScript的字元串也使用雙引號包裹,因此在JSON中需要將字元串轉義。
對象是一個無序的鍵值對集合。一個對象由花括弧包裹,每個鍵值對由冒號和逗號分隔。鍵必須是唯一的字元串,值可以是任意類型的JSON結構。
{ "name": "Jack", "age": 26, "gender": "male", "address": { "city": "New York", "state": "NY", "zip": 10001 }, "phoneNumbers": [ { "type": "home", "number": "555-1234" }, { "type": "work", "number": "555-5678" } ] }
二、JSON結構不同定義泛型
由於JSON結構體中的值可以是多樣的類型,而Java中只支持強類型對象,因此需要使用泛型來進行定義。
我們可以使用com.fasterxml.jackson.databind包下的ObjectMapper來將JSON字元串轉換為Java對象。為了避免使用時的類型轉換,我們可以使用TypeReference類來對泛型進行定義。
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; // 定義一個泛型為Person的TypeReference TypeReference<List<Person>> typeReference = new TypeReference<List<Person>>(){}; // 將JSON字元串轉換為Java對象 ObjectMapper objectMapper = new ObjectMapper(); List<Person> persons = objectMapper.readValue(jsonString, typeReference);
三、JSON結構示例
以下是一些常見的JSON結構示例。
1、一個簡單的鍵值對:
{ "name": "John" }
2、一個數組,包含多個簡單值:
{ "names": ["John", "Mike", "Lily"] }
3、一個對象,包含多個鍵值對:
{ "person": { "name": "John", "age": 26, "gender": "male" } }
4、一個數組,包含多個對象:
{ "persons": [ { "name": "John", "age": 26, "gender": "male" }, { "name": "Mike", "age": 28, "gender": "male" }, { "name": "Lily", "age": 25, "gender": "female" } ] }
四、JSON結構化數據
JSON結構化數據是將JSON結構按照特定的結構進行組織和分層,有助於提高JSON數據的可讀性和可維護性。
一般可以使用縮進或者空格進行分層,也可以使用格式化工具來進行美化。
以下是一個按照分層進行美化後的JSON結構化數據。
{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": false }
五、JSON結構介紹
JSON結構的優點是簡潔、易於閱讀和編寫,同時也是跨語言和平台的。
JSON結構的缺點是由於其靈活性,在複雜的情況下可能會變得冗長和難以理解。
對於大型的JSON數據,建議使用分層和美化的形式來組織和維護數據。
六、JSON結構比較工具
使用JSON結構比較工具可以方便地比較兩個JSON結構之間的差異。
常用的工具有DiffTool、JsonCompare和JsonDiff。
以下是使用Jackson庫中的JsonNode類來實現兩個JSON結構比較的例子。
ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode1 = objectMapper.readTree(jsonString1); JsonNode jsonNode2 = objectMapper.readTree(jsonString2); ObjectDiffNode diffResult = ObjectDifferBuilder.buildDefault().compare(jsonNode1, jsonNode2); List<DiffNode> diffNodes = diffResult.getChildDiffs(); for(DiffNode diffNode : diffNodes) { System.out.println("path: " + diffNode.getPath() + ", " + "left: " + diffNode.getLeft() + "," + "right: " + diffNode.getRight()); }
七、JSON結構數據解析
解析JSON結構數據需要使用JSON解析工具。
Java中常用的JSON解析工具有JSON-lib、Jackson和Gson等。
以下是使用Jackson庫中的ObjectMapper將JSON字元串解析為Java對象的例子。
ObjectMapper objectMapper = new ObjectMapper(); Person person = objectMapper.readValue(jsonString, Person.class);
八、JSON結構循環
在使用JSON結構循環時,我們需要先將JSON字元串轉換為Java對象,然後就可以使用Java中的for循環來遍歷JSON結構進行相關操作。
以下是一個例子,將一個含有多個person對象的JSON字元串循環輸出。
ObjectMapper objectMapper = new ObjectMapper(); List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){}); for(Person person : persons) { System.out.println("name: " + person.getName() + ", " + "age: " + person.getAge() + "," + "gender: " + person.getGender()); }
九、JSON結構化入庫
在使用JSON結構進行數據入庫時,我們需要先將JSON字元串轉換為Java對象,然後將Java對象入庫。
以下是一個將含有多個person對象的JSON字元串入庫的例子。
ObjectMapper objectMapper = new ObjectMapper(); List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){}); for(Person person : persons) { // 將person對象存入資料庫 ... }
十、JSON結構的數據選取
在使用JSON結構進行數據選取時,我們需要先將JSON字元串轉換為Java對象,然後根據需要的數據進行選取。
以下是一個將從含有多個person對象的JSON字元串中選取特定數據的例子。
ObjectMapper objectMapper = new ObjectMapper(); List<Person> persons = objectMapper.readValue(jsonString, new TypeReference<List<Person>>(){}); for(Person person : persons) { if(person.getName().equals("John")) { System.out.println("John's age: " + person.getAge()); } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200650.html