Java解析Json字符串--複雜對象

{
    "name": "三班", "students": [ { "age": 25, "gender": "female", "grades": "三班", "name": "露西", "score": { "網絡協議": 98, "JavaEE": 92, "計算機基礎": 93 }, "weight": 51.3 }, { "age": 26, "gender": "male", "grades": "三班", "name": "傑克", "score": { "網絡安全": 75, "Linux操做系統": 81, "計算機基礎": 92 }, "weight": 66.5 }, { "age": 25, "gender": "female", "grades": "三班", "name": "莉莉", "score": { "網絡安全": 95, "Linux操做系統": 98, "SQL數據庫": 88, "數據結構": 89 }, "weight": 55 } ] }

 

咱們來解析一下這個Json字符串。java

首先, 最外層由一個大括弧」{}」包裹,那麼咱們對應的能夠建一個實體類來對應,內部有兩個元素,元素name比較明顯是字符串類型的,元素students的值是由一箇中括弧」[]」包裹,那麼它對應的應該是一個數組或者列表。數據庫

接下來, 咱們分析一下中括弧」[]」內部內容格式,中括弧內有三個大括弧包裹着的內容,而且內容格式基本相同,那麼咱們能夠再定義一個實體類來對應這些大括弧。可是咱們發現三個大括弧中的內容仍是有些區別的,元素score對應的值雖然都是由一個大括弧來包裹,可是裏邊key的名稱和數量都不相同。這樣的狀況咱們不能很好的定義一個實體類來對應這個大括弧內的內容,不過咱們能夠定義一個Map來對應這個大括弧內的內容。json

最終, 定義出來的實體類以下。數組

Grades.Java安全

package com.bean; import java.util.List; public class Grades { private String name;//班級名稱 private List<Student> students;//班裏的全部學生 public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } } 

 

Student.java網絡

package com.bean; import java.util.Map; /** * 學生 */ public class Student { private int age;//年齡 private String gender;//性別,male/female private String grades;//班級 private String name;//姓名 private Map<String, Integer> score;//各科分數 private float weight;//體重 public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getGrades() { return grades; } public void setGrades(String grades) { this.grades = grades; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<String, Integer> getScore() { return score; } public void setScore(Map<String, Integer> score) { this.score = score; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } }

 

定義完以後,解析過程就很是簡單了:數據結構

package com.test;

import net.sf.json.JSONObject;

import com.bean.Grades;

public class Domain { public static void main(String[] args) { String jsonStr = "{\"name\":\"三班\",\"students\":[{\"age\":25,\"gender\":\"female\",\"grades\":\"三班\",\"name\":\"露西\",\"score\":{\"網絡協議\":98,\"JavaEE\":92,\"計算機基礎\":93},\"weight\":51.3},{\"age\":26,\"gender\":\"male\",\"grades\":\"三班\",\"name\":\"傑克\",\"score\":{\"網絡安全\":75,\"Linux操做系統\":81,\"計算機基礎\":92},\"weight\":66.5},{\"age\":25,\"gender\":\"female\",\"grades\":\"三班\",\"name\":\"莉莉\",\"score\":{\"網絡安全\":95,\"Linux操做系統\":98,\"SQL數據庫\":88,\"數據結構\":89},\"weight\":55}]}"; JSONObject jsonObject = JSONObject.fromObject(jsonStr); Grades grades = (Grades) JSONObject.toBean(jsonObject, Grades.class); } }

這個Json字符串有多層嵌套,還有不固定的元素。只要學會了方法,無論多少層也是能分析出來的。this

相關文章
相關標籤/搜索