JSONObject使用方法詳解
1.JSONObject介紹
JSONObject-lib包是一個(gè)beans,collections,maps,java arrays和xml和JSON互相轉(zhuǎn)換的包。
2.下載jar包
http://xiazai.jb51.net/201707/yuanma/lib_jb51.rar
提供了除JSONObject的jar之外依賴的其他6個(gè)jar包,一共7個(gè)jar文件
說(shuō)明:因?yàn)楣ぷ髦许?xiàng)目用到的版本是1.1的對(duì)應(yīng)jdk1.3的版本,故本篇博客是基于1.1版本介紹的。
對(duì)應(yīng)此版本的javadoc下載路徑如下:http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-1.1/
目前最新的版本為2.4,其他版本下載地址為http://sourceforge.net/projects/json-lib/files/json-lib/
3.項(xiàng)目環(huán)境:
system:WIN7 myeclipse:6.5 tomcat:5.0 JDK:開(kāi)發(fā)環(huán)境和編譯用的都是1.5
項(xiàng)目結(jié)構(gòu)如下:

說(shuō)明:本次用到的的文件只有工程目錄json包下的JSONObject_1_3類(lèi)和note.txt
4.class&method 基于1.1的API
做以下幾點(diǎn)約定:
1.介紹基于JSONObject 1.1的API
2.只介紹常用的類(lèi)和方法
3.不再介紹此版本中已經(jīng)不再推薦使用
4.介紹的類(lèi)和方法主要圍繞本篇博客中用到的
JSONObject:A JSONObject is an unordered collection of name/value pairs.
是一個(gè)final類(lèi),繼承了Object,實(shí)現(xiàn)了JSON接口
構(gòu)造方法如下:
JSONObject();創(chuàng)建一個(gè)空的JSONObject對(duì)象
JSONObject(boolean isNull);創(chuàng)建一個(gè)是否為空的JSONObject對(duì)象
普通方法如下:
fromBean(Object bean);靜態(tài)方法,通過(guò)一個(gè)pojo對(duì)象創(chuàng)建一個(gè)JSONObject對(duì)象
fromJSONObject(JSONObject object);靜態(tài)方法,通過(guò)另外一個(gè)JSONObject對(duì)象構(gòu)造一個(gè)JSONObject對(duì)象
fromJSONString(JSONString string);靜態(tài)方法,通過(guò)一個(gè)JSONString創(chuàng)建一個(gè)JSONObject對(duì)象
toString();把JSONObject對(duì)象轉(zhuǎn)換為json格式的字符串
iterator();返回一個(gè)Iterator對(duì)象來(lái)遍歷元素
接下來(lái)就是一些put/get方法,需要普通的get方法和pot方法做一下強(qiáng)調(diào)說(shuō)明,API中是這樣描述的:
A get method returns a value if one can be found, and throws an exception if one cannot be found. An opt method returns a default value instead of throwing an exception, and so is useful for obtaining optional values.
JSONArray:A JSONArray is an ordered sequence of values.
是一個(gè)final類(lèi),繼承了Object,實(shí)現(xiàn)了JSON接口
構(gòu)造方法如下:
JSONArray();構(gòu)造一個(gè)空的JSONArray對(duì)象
普通方法如下:
fromArray(Object[] array);靜態(tài)方法,通過(guò)一個(gè)java數(shù)組創(chuàng)建一個(gè)JSONArray對(duì)象
fromCollection(Collection collection);靜態(tài)方法,通過(guò)collection集合對(duì)象創(chuàng)建一個(gè)JSONArray對(duì)象
fromString(String string);靜態(tài)方法,通過(guò)一個(gè)json格式的字符串構(gòu)造一個(gè)JSONArray對(duì)象
toString();把JSONArray對(duì)象轉(zhuǎn)換為json格式的字符串
iterator();返回一個(gè)Iterator對(duì)象來(lái)遍歷元素
接下來(lái)同樣是put/get方法……
XMLSerializer:Utility class for transforming JSON to XML an back.
一個(gè)繼承自O(shè)bject的類(lèi)
構(gòu)造方法如下:
XMLSerializer();創(chuàng)建一個(gè)XMLSerializer對(duì)象
普通方法如下:
setRootName(String rootName);設(shè)置轉(zhuǎn)換的xml的根元素名稱
setTypeHintsEnabled(boolean typeHintsEnabled);設(shè)置每個(gè)元素是否顯示type屬性
write(JSON json);把json對(duì)象轉(zhuǎn)換為xml,默認(rèn)的字符編碼是UTF-8,
需要設(shè)置編碼可以用write(JSON json, String encoding)
5.對(duì)XML和JSON字符串各列一個(gè)簡(jiǎn)單的例子
JSON:
{"password":"123456","username":"張三"}
xml
<?xml version="1.0" encoding="UTF-8"?> <user_info> <password>123456</password> <username>張三</username> </user_info>
start
新建web工程,工程名稱JS,導(dǎo)入以下7個(gè)jar包,文件在前面的準(zhǔn)備工作中下載路徑。
說(shuō)明:可以不用新建web工程,普通的java工程也可以完成本篇的的操作。至于為什么要導(dǎo)入處json包以外的其他6個(gè)包,我會(huì)把note.txt貼在最后,各位一看便知。
question1:后臺(tái)接受到前臺(tái)的json格式的字符串怎么處理?
public static void jsonToJAVA() {
System.out.println("json字符串轉(zhuǎn)java代碼");
String jsonStr = "{\"password\":\"\",\"username\":\"張三\"}";
JSONObject jsonObj = JSONObject.fromString(jsonStr);
String username = jsonObj.getString("username");
String password = jsonObj.optString("password");
System.out.println("json--->java\n username=" + username
+ "\t password=" + password);
}

question2:后臺(tái)是怎么拼裝json格式的字符串?
public static void javaToJSON() {
System.out.println("java代碼封裝為json字符串");
JSONObject jsonObj = new JSONObject();
jsonObj.put("username", "張三");
jsonObj.put("password", "");
System.out.println("java--->json \n" + jsonObj.toString());
}

question3:json格式的字符串怎么轉(zhuǎn)換為xml格式的字符串?
public static void jsonToXML() {
System.out.println("json字符串轉(zhuǎn)xml字符串");
String jsonStr = "{\"password\":\"\",\"username\":\"張三\"}";
JSONObject json = JSONObject.fromString(jsonStr);
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setRootName("user_info");
xmlSerializer.setTypeHintsEnabled(false);
String xml = xmlSerializer.write(json);
System.out.println("json--->xml \n" + xml);
}

question4:xml格式的字符串怎么轉(zhuǎn)換為json格式的字符串?
public static void xmlToJSON(){
System.out.println("xml字符串轉(zhuǎn)json字符串");
String xml = "<?xml version=\".\" encoding=\"UTF-\"?><user_info><password></password><username>張三</username></user_info>";
JSON json=XMLSerializer.read(xml);
System.out.println("xml--->json \n"+json.toString());
}

question5:javabean怎么轉(zhuǎn)換為json字符串?
public static void javaBeanToJSON() {
System.out.println("javabean轉(zhuǎn)json字符串");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("張三");
userInfo.setPassword("");
JSONObject json = JSONObject.fromBean(userInfo);
System.out.println("javabean--->json \n" + json.toString());
}

question6:javabean怎么轉(zhuǎn)換為xml字符串?
public static void javaBeanToXML() {
System.out.println("javabean轉(zhuǎn)xml字符串");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("張三");
userInfo.setPassword("");
JSONObject json = JSONObject.fromBean(userInfo);
XMLSerializer xmlSerializer = new XMLSerializer();
String xml = xmlSerializer.write(json, "UTF-");
System.out.println("javabean--->xml \n" + xml);
}

完整的JSONObject_1_3.java代碼如下:
JSONObject_1_3
package json;
import net.sf.json.JSON;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
public class JSONObject__ {
public static void javaToJSON() {
System.out.println("java代碼封裝為json字符串");
JSONObject jsonObj = new JSONObject();
jsonObj.put("username", "張三");
jsonObj.put("password", "");
System.out.println("java--->json \n" + jsonObj.toString());
}
public static void jsonToJAVA() {
System.out.println("json字符串轉(zhuǎn)java代碼");
String jsonStr = "{\"password\":\"\",\"username\":\"張三\"}";
JSONObject jsonObj = JSONObject.fromString(jsonStr);
String username = jsonObj.getString("username");
String password = jsonObj.optString("password");
System.out.println("json--->java\n username=" + username
+ "\t password=" + password);
}
public static void jsonToXML() {
System.out.println("json字符串轉(zhuǎn)xml字符串");
String jsonStr = "{\"password\":\"\",\"username\":\"張三\"}";
JSONObject json = JSONObject.fromString(jsonStr);
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setRootName("user_info");
xmlSerializer.setTypeHintsEnabled(false);
String xml = xmlSerializer.write(json);
System.out.println("json--->xml \n" + xml);
}
public static void javaBeanToJSON() {
System.out.println("javabean轉(zhuǎn)json字符串");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("張三");
userInfo.setPassword("");
JSONObject json = JSONObject.fromBean(userInfo);
System.out.println("javabean--->json \n" + json.toString());
}
public static void javaBeanToXML() {
System.out.println("javabean轉(zhuǎn)xml字符串");
UserInfo userInfo = new UserInfo();
userInfo.setUsername("張三");
userInfo.setPassword("");
JSONObject json = JSONObject.fromBean(userInfo);
XMLSerializer xmlSerializer = new XMLSerializer();
String xml = xmlSerializer.write(json, "UTF-");
System.out.println("javabean--->xml \n" + xml);
}
public static void xmlToJSON(){
System.out.println("xml字符串轉(zhuǎn)json字符串");
String xml = "<?xml version=\".\" encoding=\"UTF-\"?><user_info><password></password><username>張三</username></user_info>";
JSON json=XMLSerializer.read(xml);
System.out.println("xml--->json \n"+json.toString());
}
public static void main(String args[]) {
// javaToJSON();
// jsonToJAVA();
// jsonToXML();
// javaBeanToJSON();
// javaBeanToXML();
xmlToJSON();
}
}
完整的UserInfo.java代碼如下:
UserInfo
package json;
public class UserInfo {
public String username;
public String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
result
代碼和運(yùn)行結(jié)果都已經(jīng)貼在每個(gè)問(wèn)題的后面,運(yùn)行時(shí)直接用main方法分別對(duì)每個(gè)方法運(yùn)行即可看到測(cè)試效果。
note.txt是報(bào)的對(duì)應(yīng)的錯(cuò)誤及解決方法,也從另一個(gè)方面說(shuō)明為什么需要導(dǎo)入前面提到的jar包;
note.txt文件內(nèi)容如下:
java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:537) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at java.net.URLClassLoader.defineClass(URLClassLoader.java:251) at java.net.URLClassLoader.access$100(URLClassLoader.java:55) at java.net.URLClassLoader$1.run(URLClassLoader.java:194) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at generate.TestJSONObject.main(TestJSONObject.java:40) Exception in thread "main"
解決方案:導(dǎo)入commons-lang-2.1.jar
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at net.sf.json.JSONObject.<clinit>(JSONObject.java:125) at generate.TestJSONObject.main(TestJSONObject.java:40) Exception in thread "main"
解決方案:導(dǎo)入commons-logging.jar
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean at net.sf.json.JSONObject.set(JSONObject.java:2164) at net.sf.json.JSONObject.put(JSONObject.java:1853) at net.sf.json.JSONObject.put(JSONObject.java:1806) at generate.TestJSONObject.main(TestJSONObject.java:41) Exception in thread "main"
解決方案:導(dǎo)入commons-beanutils.jar
java.lang.NoClassDefFoundError: net/sf/ezmorph/MorpherRegistry at net.sf.json.util.JSONUtils.<clinit>(JSONUtils.java:65) at net.sf.json.JSONObject.set(JSONObject.java:2164) at net.sf.json.JSONObject.put(JSONObject.java:1853) at net.sf.json.JSONObject.put(JSONObject.java:1806) at generate.TestJSONObject.main(TestJSONObject.java:41) Exception in thread "main"
解決方案:導(dǎo)入ezmorph-1.0.2.jar
java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap at org.apache.commons.beanutils.PropertyUtils.<clinit>(PropertyUtils.java:208) at net.sf.json.JSONObject.fromBean(JSONObject.java:190) at net.sf.json.JSONObject.fromObject(JSONObject.java:437) at net.sf.json.JSONObject.set(JSONObject.java:2196) at net.sf.json.JSONObject.put(JSONObject.java:1853) at net.sf.json.JSONObject.put(JSONObject.java:1806) at generate.TestJSONObject.main(TestJSONObject.java:41) Exception in thread "main"
解決方案:導(dǎo)入commons-collections-3.0.jar
Exception in thread "main" java.lang.NoClassDefFoundError: nu/xom/Serializer at generate.TestJSONObject.jsonToXML(TestJSONObject.java:88) at generate.TestJSONObject.main(TestJSONObject.java:96)
解決方案:導(dǎo)入xom-1.0d10.jar
幾點(diǎn)說(shuō)明:
1.注意UserInfo類(lèi)的修飾符,用public修飾,變量username和password也用public修飾,最好單獨(dú)的寫(xiě)一個(gè)類(lèi),這里就不貼出來(lái)了
2.以上json字符串和xml字符串都是最簡(jiǎn)單的形式,實(shí)際開(kāi)發(fā)中json字符串和xml格式比這個(gè)復(fù)雜的多,
處理復(fù)雜的json字符串,可以封裝寫(xiě)一個(gè)類(lèi)繼承HashMap,然后重寫(xiě)其put和get方法,以支持對(duì)類(lèi)型為A[0].B及A.B的鍵值的讀取和指定
3.以上6中情況在實(shí)際開(kāi)發(fā)中可能有些不存在或不常用
存在的問(wèn)題:
1.使用XMLSerializer的write方法生成的xml字符串的中文亂碼問(wèn)題
2.question4中的紅色的log日志問(wèn)題
以上內(nèi)容是小編給大家介紹的JSONObject使用方法詳解,希望大家喜歡。
- Java JSONObject與JSONArray對(duì)象案例詳解
- JAVA中JSONObject對(duì)象和Map對(duì)象之間的相互轉(zhuǎn)換
- 詳解Java中String JSONObject JSONArray List<實(shí)體類(lèi)>轉(zhuǎn)換
- JSONObject與JSONArray使用方法解析
- Java使用JSONObject操作json實(shí)例解析
- Java中JSONObject與JSONArray的使用區(qū)別詳解
- JSON字符串轉(zhuǎn)換JSONObject和JSONArray的方法
- JSONObject與JSONArray的使用
- JSONObject用法詳解
相關(guān)文章
JS實(shí)現(xiàn)簡(jiǎn)易圖片輪播效果的方法
這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)易圖片輪播效果的方法,實(shí)例分析了javascript操作圖片實(shí)現(xiàn)輪播特效的技巧,需要的朋友可以參考下2015-03-03
將Datatable轉(zhuǎn)化成json發(fā)送前臺(tái)實(shí)現(xiàn)思路
將Datatable轉(zhuǎn)化成json可以將dt序列化成json,放到前臺(tái)的隱藏控件hidBoundary中,具體的實(shí)現(xiàn)如下,有類(lèi)似需求的朋有可以參考下2013-09-09
詳解如何在微信小程序開(kāi)發(fā)中正確的使用vant ui組件
這篇文章主要介紹了詳解如何在微信小程序開(kāi)發(fā)中正確的使用vant ui組件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
javascript實(shí)現(xiàn)狀態(tài)欄文字首尾相接循環(huán)滾動(dòng)的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)狀態(tài)欄文字首尾相接循環(huán)滾動(dòng)的方法,實(shí)例分析了javascript定時(shí)函數(shù)及頁(yè)面元素屬性操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
微信小程序?qū)崿F(xiàn)的點(diǎn)擊按鈕 彈出底部上拉菜單功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)的點(diǎn)擊按鈕 彈出底部上拉菜單功能,結(jié)合實(shí)例形式分析了action-sheet組件及事件響應(yīng)簡(jiǎn)單使用技巧,需要的朋友可以參考下2018-12-12

