使用JSONObject生成和解析json的方法
1. json數(shù)據(jù)類型
類型
描述
Number
數(shù)字型
String
字符串型
Boolean
布爾型
Array
數(shù)組
Object
對(duì)象
null
空值
(1)json中不區(qū)分整數(shù)、小數(shù)等類型,而統(tǒng)一使用Number來(lái)存儲(chǔ)數(shù)字。
(2)Array表示數(shù)組,以中括號(hào)"[]"括起來(lái),元素之間以逗號(hào)分隔,元素可以為任意類型。
(3)Object表示對(duì)象,類似于C語(yǔ)言中的結(jié)構(gòu)體,以花括號(hào)"{}"括起來(lái),其元素要求為鍵值對(duì),key必須為String類型的,而value則可為任意類型。key和value之間以":"表示映射關(guān)系,元素之間也是以逗號(hào)分隔。
(4)String、Boolean、null與Java中一樣,這里不再贅述。
2. 構(gòu)建json
使用JSONObject需要引用org.json包,推薦通過(guò)maven引用,
溫馨提示:我在構(gòu)建maven項(xiàng)目的時(shí)候?qū)覍覄?chuàng)建失敗,在網(wǎng)上查了很久還是搞不定,后來(lái)科學(xué)上網(wǎng)就搞定了,如果你也創(chuàng)建失敗,可以嘗試一下。
2.1 直接構(gòu)建
JSONObject obj = new JSONObject(); obj.put(key, value);
直接構(gòu)建即直接實(shí)例化一個(gè)JSONObject對(duì)象,而后調(diào)用其put()方法,將數(shù)據(jù)寫(xiě)入。put()方法的第一個(gè)參數(shù)為key值,必須為String類型,第二個(gè)參數(shù)為value,可以為boolean、double、int、long、Object、Map以及Collection等。當(dāng)然,double以及int等類型只是在Java中,寫(xiě)入到j(luò)son中時(shí),統(tǒng)一都會(huì)以Number類型存儲(chǔ)。
范例:
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"}); //調(diào)用toString()方法可直接將其內(nèi)容打印出來(lái) System.out.println(obj.toString()); } }
輸出結(jié)果為:
{"hobbies":["hiking","swimming"],"sex":"male","name":"John","is_student":true,"age":22}
這里可以看到,為了壓縮大小以便于更高效地傳輸,json把所有空格、換行符等空白符全部去掉了。如果想要直觀點(diǎn)看其內(nèi)容,可以用一些在線的json解析器看,例如:http://www.jsoneditoronline.org/
2.2 使用HashMap構(gòu)建
使用HashMap構(gòu)建json,實(shí)際上即先創(chuàng)建好一個(gè)HashMap對(duì)象并且將數(shù)據(jù)打包進(jìn)去,而后在創(chuàng)建JSONObject時(shí)將其作為一個(gè)參數(shù)傳進(jìn)去。
范例:
public class JSONObjectSample { public static void main(String[] args) { createJsonByMap(); } private static void createJsonByMap() { 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); System.out.println(obj.toString()); } }
2.3 使用JavaBean構(gòu)建
相較于前兩種方法,實(shí)際開(kāi)發(fā)中應(yīng)用JavaBean構(gòu)建json的情況更為常見(jiàn),因?yàn)檫@樣代碼的重用率更高。
范例:
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); } }
需要注意一點(diǎn),JavaBean一定要有g(shù)etter方法,否則會(huì)無(wú)法訪問(wèn)存儲(chǔ)的數(shù)據(jù)。
3. 解析json
解析json主要是基本類型如Number、boolean等,與數(shù)組Array。
基本類型的解析直接調(diào)用JSONObject對(duì)象的getXxx(key)方法,如果獲取字符串則getString(key),布爾值則getBoolean(key),以此類推。
數(shù)組的解析稍微麻煩一點(diǎn),需要通過(guò)JSONObject對(duì)象的getJSONArray(key)方法獲取到一個(gè)JSONArray對(duì)象,再調(diào)用JSONArray對(duì)象的get(i)方法獲取數(shù)組元素,i為索引值。
范例:
首先在工程目錄"src/main/java"下創(chuàng)建一個(gè)json文件,用于解析。
demo.json:
{ "hobbies": [ "hiking", "swimming" ], "sex": "male", "name": "John", "is_student": true, "age": 22 }
在pom.xml中加入對(duì)commons-io的依賴,以便于使用FileUtils進(jìn)行文件訪問(wèn):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.studying</groupId> <artifactId>myjson</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>myjson</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency> <!--加入對(duì)commons-io的依賴--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> </dependencies> </project>
主類:
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); //對(duì)基本類型的解析 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")); //對(duì)數(shù)組的解析 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); } } }
以上這篇使用JSONObject生成和解析json的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java常見(jiàn)啟動(dòng)命令-jar、-server和-cp詳細(xì)比較
這篇文章主要給大家介紹了關(guān)于Java常見(jiàn)啟動(dòng)命令-jar、-server和-cp詳細(xì)比較的相關(guān)資料,該文總結(jié)了常歸的jar包的啟動(dòng)方式,并分析各種啟動(dòng)方式的區(qū)別,需要的朋友可以參考下2023-07-07Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾)
下面小編就為大家?guī)?lái)一篇Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾) 。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12javaweb前端向后端傳值的幾種方式總結(jié)(附代碼)
javaweb是java開(kāi)發(fā)中的一個(gè)方向,下面這篇文章主要給大家介紹了關(guān)于javaweb前端向后端傳值的幾種方式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決
這篇文章主要介紹了JAVA?ImageIO.read方法報(bào)錯(cuò)/無(wú)效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)的方法(反向代理、轉(zhuǎn)發(fā))
這篇文章主要介紹了spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)(反向代理、轉(zhuǎn)發(fā))的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11