您的位置:首頁>正文

小議JSONObject之利用jsonobject生成和解析json

1. json資料類型類型描述Number數字型String字串型Boolean布林型Array陣列Object物件null空值

(1)json中不區分整數、小數等類型, 而統一使用Number來存儲數位。

(2)Array表示陣列, 以中括弧"[]"括起來, 元素之間以逗號分隔, 元素可以為任意類型。

(3)Object表示物件, 類似於C語言中的結構體, 以花括弧"{}"括起來, 其元素要求為鍵值對, key必須為String類型的, 而value則可為任意類型。 key和value之間以":"表示映射關係, 元素之間也是以逗號分隔。

2. 構建json

在eclipse中使用JSONObject需要引用org.json包, 推薦通過maven引用, 溫馨提示:我在構建maven項目的時候屢屢創建失敗, 在網上查了很久還是搞不定, 後來多試幾次才好, 嘗試一下。

如果是在Android Studio中, 則可以直接使用。

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類型存儲。

範例:

import org.json.JSONObject;public class JSONObjectSample { public static void main(String[] args) { createJson(); } private static void createJson() { JSONObject obj = new JSONObject(); obj.put("name", "John"); obj.put("sex", "male"); obj.put("age", 22); obj.put("is_student", true); obj.put("hobbies", new String[] {"hiking", "swimming"}); //調用toString()方法可直接將其內容列印出來 System.out.println(obj.toString()); }}

輸出結果為:

{"hobbies":["hiking","swimming"],"sex":"male","name":"John","is_student":true,"age":22}

這裡可以看到, 為了壓縮大小以便於更高效地傳輸, json把所有空格、分行符號等空白符全部去掉了。 如果想要直觀點看其內容, 可以用一些線上的json解析器查看。

2.2 使用HashMap構建

使用HashMap構建json, 實際上即先創建好一個HashMap物件並且將資料打包進去, 而後在創建JSONObject時將其作為一個參數傳進去。

範例:

public class JSONObjectSample { public static void main(String[] args) { createJsonByMap(); } private static void createJsonByMap() { Map data = new HashMap(); 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); System.out.println(obj.toString()); }}

2.3 使用JavaBean構建

相較於前兩種方法, 實際開發中應用JavaBean構建json的情況更為常見, 因為這樣代碼的重用率更高。

範例:

JavaBean:

public class PersonInfo { private String name; private String sex; private int age; private boolean isStudent; private String[] hobbies; public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setStudent(boolean isStudent) { this.isStudent = isStudent; } public void setHobbies(String[] hobbies) { this.hobbies = hobbies; } //getter不能少 public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } public boolean isStudent() { return isStudent; } public String[] getHobbies() { return hobbies; }}

main:

import org.json.JSONObject;public class JSONObjectSample { public static void main(String[] args) { createJsonByJavaBean(); } private static void createJsonByJavaBean() { 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); System.out.println(obj); }}

需要注意一點, JavaBean一定要有getter方法, 否則會無法訪問存儲的資料。

3. 解析json

解析json主要是基本類型如Number、boolean等, 與陣列Array。

基本類型的解析直接調用JSONObject物件的getXxx(key)方法, 如果獲取字串則getString(key), 布林值則getBoolean(key), 以此類推。

陣列的解析稍微麻煩一點,

需要通過JSONObject物件的getJSONArray(key)方法獲取到一個JSONArray物件, 再調用JSONArray物件的get(i)方法獲取陣列元素, i為索引值。

範例:

首先在工程目錄"src/main/java"下創建一個json檔, 用於解析。

demo.json:

{ "hobbies": [ "hiking", "swimming" ], "sex": "male", "name": "John", "is_student": true, "age": 22}

在pom.xml中加入對commons-io的依賴, 以便於使用FileUtils進行檔訪問:

4.0.0 com.studying myjson 0.0.1-SNAPSHOT jar myjson http://maven.apache.org UTF-8 org.json json 20160810 commons-io commons-io 2.4

主類:

import java.io.File;import java.io.IOException;import org.apache.commons.io.FileUtils;import org.json.JSONArray;import org.json.JSONObject;public class JSONObjectSample { public static void main(String[] args) throws IOException { File file = new File("src/main/java/demo.json"); String content = FileUtils.readFileToString(file); //對基本類型的解析 JSONObject obj = new JSONObject(content); System.out.println("name:" + obj.getString("name")); System.out.println("sex:" + obj.getString("sex")); System.out.println("age" + obj.getInt("age")); System.out.println("is_student" + obj.getBoolean("is_student")); //對陣列的解析 JSONArray hobbies = obj.getJSONArray("hobbies"); System.out.println("hobbies:"); for (int i = 0; i < hobbies.length(); i++) { String s = (String) hobbies.get(i); System.out.println(s); } }}

結尾

這裡最後說一句, 歡迎大家到我本人的技術類網站:"技術棧":"www.jishux.com", 來參觀學習呦。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示