Heim >Web-Frontend >js-Tutorial >Ausführliche Erklärung zur Verwendung von JSONObject_javascript-Fähigkeiten

Ausführliche Erklärung zur Verwendung von JSONObject_javascript-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 15:24:591740Durchsuche

1.JSONObject-Einführung

Das JSONObject-lib-Paket ist ein Paket zum Konvertieren von Beans, Sammlungen, Karten, Java-Arrays und XML in JSON.

2. Laden Sie das Glaspaket herunter

http://files.cnblogs.com/java-pan/lib.rar

Stellt 6 weitere JAR-Pakete bereit, die vom JSONObject-JAR abhängig sind, insgesamt 7 JAR-Dateien

Hinweis: Da im Projekt bei der Arbeit die Version 1.1 verwendet wird, was der jdk1.3-Version entspricht, basiert dieser Blog auf der Version 1.1.

Der dieser Version entsprechende Javadoc-Downloadpfad lautet wie folgt: http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-1.1/

Die neueste Version ist 2.4. Die Download-Adresse für andere Versionen ist http://sourceforge.net/projects/json-lib/files/json-lib/

3. Projektumgebung:

System: WIN7 Myeclipse: 6.5 Tomcat: 5.0 JDK: Sowohl Entwicklungsumgebung als auch Kompilierung verwenden 1.5

Die Projektstruktur ist wie folgt:

Hinweis: Die diesmal verwendeten Dateien sind nur die Klasse JSONObject_1_3 und note.txt im JSON-Paket im Projektverzeichnis

4.Klassen- und Methoden-API basierend auf 1.1

Treffen Sie folgende Vereinbarungen:

1. Einführung der API basierend auf JSONObject 1.1

2. Führen Sie nur häufig verwendete Klassen und Methoden ein

3. Diese Version wird nicht mehr empfohlen

4. Die vorgestellten Klassen und Methoden konzentrieren sich hauptsächlich auf die in diesem Blog verwendeten

JSONObject:A JSONObject is an unordered collection of name/value pairs.
ist eine letzte Klasse, erbt Object und implementiert die JSON-Schnittstelle

Die Bauweise ist wie folgt:

JSONObject(); Erstellt ein leeres JSONObject-Objekt

JSONObject(boolean isNull); Erstellt ein JSONObject-Objekt, unabhängig davon, ob es leer ist

Die übliche Methode ist wie folgt:

fromBean(Object bean); Statische Methode, erstellt ein JSONObject-Objekt über ein Pojo-Objekt

fromJSONObject(JSONObject object); Statische Methode, erstellt ein JSONObject-Objekt über ein anderes JSONObject-Objekt

fromJSONString(JSONString string); Statische Methode, erstellt ein JSONObject-Objekt über einen JSONString

toString(); JSONObject-Objekt in JSON-Formatzeichenfolge konvertieren

iterator(); gibt ein Iterator-Objekt zurück, um Elemente zu durchlaufen

Als nächstes müssen einige Put/Get-Methoden hervorgehoben werden. Die API wird wie folgt beschrieben:

Eine get-Methode gibt einen Wert zurück, wenn einer gefunden werden kann, und löst eine Ausnahme aus, wenn keiner gefunden werden kann. Eine opt-Methode gibt einen Standardwert zurück, anstatt eine Ausnahme auszulösen, und ist daher nützlich, um optionale Werte zu erhalten.

JSONArray:Ein JSONArray ist eine geordnete Folge von Werten.

ist eine letzte Klasse, erbt Object und implementiert die JSON-Schnittstelle

Die Bauweise ist wie folgt:

JSONArray(); erstellt ein leeres JSONArray-Objekt

Die übliche Methode ist wie folgt:

fromArray(Object[] array); statische Methode, erstellt ein JSONArray-Objekt über ein Java-Array

fromCollection(Collection-Sammlung); statische Methode, erstellt ein JSONArray-Objekt über das Sammlungsobjekt

fromString(String string); statische Methode, erstellt ein JSONArray-Objekt aus einem JSON-Format-String

toString(); JSONArray-Objekt in JSON-Formatzeichenfolge konvertieren

iterator(); gibt ein Iterator-Objekt zurück, um Elemente zu durchlaufen

Der nächste Schritt ist ebenfalls die Put/Get-Methode...

XMLSerializer: Dienstprogrammklasse zum Umwandeln von JSON in XML und zurück.

Eine Klasse, die von Object erbt

Die Bauweise ist wie folgt:

XMLSerializer(); Erstellen Sie ein XMLSerializer-Objekt

Die übliche Methode ist wie folgt:

setRootName(String rootName); Setzt den Stammelementnamen der konvertierten XML

setTypeHintsEnabled(boolean typeHintsEnabled); Legt fest, ob jedes Element das Typattribut anzeigt

write(JSON json); JSON-Objekt in XML konvertieren. Die Standardzeichenkodierung ist UTF-8,

Wenn Sie die Kodierung festlegen müssen, können Sie write(JSON json, Stringkodierung) verwenden

Ein einfaches Beispiel für jede Spalte von XML- und JSON-Strings

JSON:

{"password":"123456","username":"张三"}

xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
<user_info>
<password>123456</password>
<username>张三</username>
</user_info>

Starten

Erstellen Sie ein neues Webprojekt mit dem Projektnamen JS und importieren Sie die folgenden 7 JAR-Pakete. Die Dateien werden aus dem Pfad in den vorherigen Vorbereitungen heruntergeladen.

Hinweis: Sie müssen kein neues Webprojekt erstellen, um die Vorgänge in diesem Artikel durchzuführen. Warum ich neben dem JSON-Paket auch die anderen 6 Pakete importieren muss, werde ich am Ende in der Datei „note.txt“ veröffentlichen, damit Sie es auf einen Blick wissen.

Frage 1: Wie verarbeite ich die vom Frontend empfangene JSON-Formatzeichenfolge im Hintergrund?

 public static void jsonToJAVA() {
 System.out.println("json字符串转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:后台是怎么拼装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格式的字符串怎么转换为xml格式的字符串?

 public static void jsonToXML() {
 System.out.println("json字符串转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格式的字符串怎么转换为json格式的字符串?

public static void xmlToJSON(){
 System.out.println("xml字符串转json字符串");
 String xml = "<&#63;xml version=\".\" encoding=\"UTF-\"&#63;><user_info><password></password><username>张三</username></user_info>";
 JSON json=XMLSerializer.read(xml);
 System.out.println("xml--->json \n"+json.toString());
 }

 

question5:javabean怎么转换为json字符串?

public static void javaBeanToJSON() {
 System.out.println("javabean转json字符串");
 UserInfo userInfo = new UserInfo();
 userInfo.setUsername("张三");
 userInfo.setPassword("");
 JSONObject json = JSONObject.fromBean(userInfo);
 System.out.println("javabean--->json \n" + json.toString());
 }

 

question6:javabean怎么转换为xml字符串?

public static void javaBeanToXML() {
 System.out.println("javabean转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字符串转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字符串转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转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转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字符串转json字符串");
 String xml = "<?xml version=\".\" encoding=\"UTF-\"?>张三";
 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

代码和运行结果都已经贴在每个问题的后面,运行时直接用main方法分别对每个方法运行即可看到测试效果。

note.txt是报的对应的错误及解决方法,也从另一个方面说明为什么需要导入前面提到的jar包;

note.txt文件内容如下:

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" 

解决方案:导入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" 

解决方案:导入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" 

解决方案:导入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" 

解决方案:导入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" 

解决方案:导入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) 

解决方案:导入xom-1.0d10.jar

几点说明:

1.注意UserInfo类的修饰符,用public修饰,变量username和password也用public修饰,最好单独的写一个类,这里就不贴出来了

2.以上json字符串和xml字符串都是最简单的形式,实际开发中json字符串和xml格式比这个复杂的多,

处理复杂的json字符串,可以封装写一个类继承HashMap,然后重写其put和get方法,以支持对类型为A[0].B及A.B的键值的读取和指定

3.以上6中情况在实际开发中可能有些不存在或不常用

存在的问题:

1.使用XMLSerializer的write方法生成的xml字符串的中文乱码问题

2.question4中的红色的log日志问题

以上内容是小编给大家介绍的JSONObject使用方法详解,希望大家喜欢。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn