Maison >interface Web >js tutoriel >Explication détaillée de la façon d'utiliser les compétences JSONObject_javascript

Explication détaillée de la façon d'utiliser les compétences JSONObject_javascript

WBOY
WBOYoriginal
2016-05-16 15:24:591738parcourir

1.Introduction à JSONObject

Le package JSONObject-lib est un package permettant de convertir des beans, des collections, des cartes, des tableaux Java et du XML en JSON.

2. Téléchargez le package du pot

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

Fournit 6 autres packages jar qui dépendent du jar de JSONObject, soit un total de 7 fichiers jar

Remarque : La version utilisée dans le projet au travail étant la 1.1, ce qui correspond à la version jdk1.3, ce blog est basé sur la version 1.1.

Le chemin de téléchargement javadoc correspondant à cette version est le suivant : http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-1.1/

La dernière version est la 2.4. L'adresse de téléchargement pour les autres versions est http://sourceforge.net/projects/json-lib/files/json-lib/

3. Environnement du projet :

système : WIN7 myeclipse : 6.5 tomcat : 5.0 JDK : l'environnement de développement et la compilation utilisent 1.5

La structure du projet est la suivante :

Remarque : les fichiers utilisés cette fois sont uniquement la classe JSONObject_1_3 et note.txt sous le package json dans le répertoire du projet

API 4.class&method basée sur 1.1

Prouver les accords suivants :

1. Présentation de l'API basée sur JSONObject 1.1

2. Introduisez uniquement les classes et méthodes couramment utilisées

3. N'est plus introduite. Cette version n'est plus recommandée

.

4. Les cours et méthodes présentés se concentrent principalement sur celles utilisées dans ce blog

JSONObject:A JSONObject is an unordered collection of name/value pairs.

est une classe finale, hérite d'Object et implémente l'interface JSON

La méthode de construction est la suivante :

JSONObject(); Créer un objet JSONObject vide

JSONObject(boolean isNull); Créer un objet JSONObject s'il est vide

La méthode courante est la suivante :

fromBean(Object bean); Méthode statique, crée un objet JSONObject via un objet pojo

fromJSONObject(JSONObject object); Méthode statique, construit un objet JSONObject via un autre objet JSONObject

fromJSONString(JSONString string); Méthode statique, crée un objet JSONObject via un JSONString

toString(); Convertir l'objet JSONObject en chaîne au format json

iterator(); renvoie un objet Iterator pour parcourir les éléments

Voici quelques méthodes put/get. Les méthodes get et pot ordinaires doivent être soulignées. L'API est décrite comme ceci :

Une méthode get renvoie une valeur si elle peut être trouvée et lève une exception si elle est introuvable. Une méthode opt renvoie une valeur par défaut au lieu de lancer une exception, et est donc utile pour obtenir des valeurs facultatives.

JSONArray : un JSONArray est une séquence ordonnée de valeurs.

est une classe finale, hérite d'Object et implémente l'interface JSON

La méthode de construction est la suivante :

JSONArray(); construit un objet JSONArray vide

La méthode courante est la suivante :

fromArray(Object[] array); méthode statique, crée un objet JSONArray via un tableau Java

fromCollection(Collection collection); méthode statique, crée un objet JSONArray via l'objet collection

fromString(String string); méthode statique, construit un objet JSONArray à partir d'une chaîne au format json

toString(); Convertir l'objet JSONArray en chaîne au format json

iterator(); renvoie un objet Iterator pour parcourir les éléments

La prochaine étape est aussi la méthode put/get...

XMLSerializer : Classe utilitaire pour transformer JSON en XML et inversement.

Une classe qui hérite d'Object

La méthode de construction est la suivante :

XMLSerializer(); Créer un objet XMLSerializer

La méthode courante est la suivante :

setRootName(String rootName); Définit le nom de l'élément racine du XML converti

setTypeHintsEnabled(boolean typeHintsEnabled); Définit si chaque élément affiche l'attribut de type

write(JSON json); Convertir l'objet json en XML. Le codage de caractères par défaut est UTF-8,

Si vous devez définir l'encodage, vous pouvez utiliser write(JSON json, String encoding)

5. Un exemple simple pour chaque colonne de chaînes XML et JSON

JSON :

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

xml

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

démarrer

Créez un nouveau projet Web avec le nom du projet JS et importez les 7 packages jar suivants. Les fichiers sont téléchargés à partir du chemin dans les préparations précédentes.

Remarque : vous n'avez pas besoin de créer un nouveau projet Web. Les projets Java ordinaires peuvent également effectuer les opérations décrites dans cet article. Quant à la raison pour laquelle je dois importer les 6 autres packages en plus du package json, je publierai le note.txt à la fin afin que vous puissiez le savoir en un coup d'œil.

question1 : Comment traiter la chaîne au format json reçue du frontend en arrière-plan ?

 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使用方法详解,希望大家喜欢。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn