1. 導入依賴
這里以 20180813 的 json 版本為例
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
2. 構建 json
2.1 直接構建
JSONObject obj = new JSONObject();
obj.put(key, value);
直接構建即直接實例化一個 JSONObject 對象,而后調用其 put() 方法,將數據寫入。put() 方法的第一個參數為 key 值,必須為 String 類型,第二個參數為 value,可以為 boolean、double、int、long、Object、Map 以及 Collection 等。當然,double 以及 int 等類型只是在 Java 中,寫入到 json 中時,統一都會以 Number 類型存儲。
2.2 使用HashMap構建
使用 HashMap 構建 json,實際上即先創建好一個 HashMap 對象並且將數據打包進去,而后在創建 JSONObject 時將其作為一個參數傳進去。
Map<String, Object> data = new HashMap<String, Object>();
data.put("name", "John");
data.put("sex", "male");
data.put("age", 22);
data.put("is_student", true);
data.put("hobbies", new String[] {"hiking", "swimming"});
JSONObject obj = new JSONObject(data);
// 或是下面這種寫法,將 java 對象轉換為 json 對象
JSONObject obj = JSONObject.fromObject(data);
2.3 使用JavaBean構建
相較於前兩種方法,實際開發中應用 JavaBean 構建 json 的情況更為常見,因為這樣代碼的重用率更高。
- 創建 javaBean
@Data
public class PersonInfo {
private String name;
private String sex;
private int age;
private boolean isStudent;
private String[] hobbies;
- 構建 json
PersonInfo info = new PersonInfo();
info.setName("John");
info.setSex("male");
info.setAge(22);
info.setStudent(true);
info.setHobbies(new String[] {"hiking", "swimming"});
JSONObject obj = new JSONObject(info);
// 或是下面這種寫法,將 java 對象轉換為 json 對象
JSONObject obj = JSONObject.fromObject(data);
注意:JavaBean一定要有 getter 方法,否則會無法訪問存儲的數據。
3. 解析 json
解析 json 主要是基本類型如 Number、boolean 等,與數組 Array。
基本類型的解析直接調用 JSONObject 對象的 getXxx(key) 方法,如果獲取字符串則 getString(key),布爾值則 getBoolean(key),以此類推。
數組的解析稍微麻煩一點,需要通過 JSONObject 對象的 getJSONArray(key) 方法獲取到一個 JSONArray 對象,再調用 JSONArray 對象的 get(i) 方法獲取數組元素,i 為索引值
3.1 只包含一個對象的 json 字符串解析
//將得到json數據轉換為一個json對象
JSONObject jsonObject = new JSONObject(data);
//獲取"persons"的json對象
jsonObject = jsonObject.getJSONObject("persons");
//通過相應的get方法,獲取相應的屬性
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
//將獲取到的數據放到一個Person對象中
Person person = new Person(id, name, age);
3.2 含有多個對象的 json 字符串
List<Person> list = new ArrayList<>();
//將得到json數據轉換為一個json對象
JSONObject jsonObject = new JSONObject(data);
//獲取"persons"的json對象,並將其轉換為一個json數組
JSONArray array = jsonObject.getJSONArray("persons");
//通過循環獲取數據,並放入list集合中
for (int i = 0;i<array.length();i++){
int id = array.getJSONObject(i).getInt("id");
String name = array.getJSONObject(i).getString("name");
int age = array.getJSONObject(i).getInt("age");
Person person = new Person(id, name, age);
list.add(person);
}
return list;
4. 參考
https://www.cnblogs.com/joahyau/p/6736637.html
完。