ホームページ  >  記事  >  ウェブフロントエンド  >  JSONObject_javascriptスキルの使い方を詳しく解説

JSONObject_javascriptスキルの使い方を詳しく解説

WBOY
WBOYオリジナル
2016-05-16 15:24:591706ブラウズ

1.JSONオブジェクトの紹介

JSONObject-lib パッケージは、Bean、コレクション、マップ、Java 配列、および XML を JSON に変換するためのパッケージです。

2. jar パッケージをダウンロードします

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

JSONObject の jar に依存する他の 6 つの jar パッケージ、合計 7 つの jar ファイルを提供します

注: 職場のプロジェクトで使用しているバージョンは jdk1.3 バージョンに相当する 1.1 であるため、このブログは 1.1 バージョンに基づいています。

このバージョンに対応する 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. プロジェクト環境:

システム: WIN7 myeclipse: 6.5 tomcat: 5.0 JDK: 開発環境とコンパイルの両方で 1.5 を使用

プロジェクトの構造は次のとおりです:

注: 今回使用するファイルは、プロジェクト ディレクトリの json パッケージにある JSONObject_1_3 クラスと note.txt のみです

4.1.1 に基づくクラス&メソッド API

次の契約を締結します:

1. JSONObject 1.1 に基づく API の紹介

2. よく使用されるクラスとメソッドのみを紹介します

3. このバージョンは推奨されなくなりました。

4. 紹介されているクラスとメソッドは、主にこのブログで使用されているものに焦点を当てています。

JSONObject:A JSONObject is an unordered collection of name/value pairs.
は最終クラスであり、Object を継承し、JSON インターフェース

を実装します。

構築方法は次のとおりです。

JSONObject(); 空の JSONObject オブジェクトを作成します

JSONObject(boolean isNull); 空であるかどうかに関係なく、JSONObject オブジェクトを作成します

一般的な方法は次のとおりです:

fromBean(Object Bean); 静的メソッドは、pojo オブジェクトを通じて JSONObject オブジェクトを作成します

fromJSONObject(JSONObject object); 静的メソッド、別の JSONObject オブジェクトを通じて JSONObject オブジェクトを構築します

fromJSONString(JSONString string); 静的メソッドは、JSONString

を通じて JSONObject オブジェクトを作成します。

toString(); JSONObject オブジェクトを JSON 形式の文字列に変換します

iterator(); 要素を走査するための Iterator オブジェクトを返します

次に、通常の get メソッドと Pot メソッドをいくつか説明します。

get メソッドは値が見つかった場合は値を返し、見つからない場合は例外をスローします。opt メソッドは例外をスローする代わりにデフォルト値を返すため、オプションの値を取得するのに役立ちます。

JSONArray:JSONArray は、順序付けられた値のシーケンスです。

は最終クラスであり、Object を継承し、JSON インターフェース

を実装します。

構築方法は次のとおりです。

JSONArray(); 空の JSONArray オブジェクトを構築します

一般的な方法は次のとおりです:

fromArray(Object[] array); 静的メソッド、Java 配列を通じて JSONArray オブジェクトを作成します

fromCollection(Collection collection); 静的メソッド、コレクション オブジェクトを通じて JSONArray オブジェクトを作成します

fromString(String string); 静的メソッド、JSON 形式の文字列から JSONArray オブジェクトを構築します

toString(); JSONArray オブジェクトを JSON 形式の文字列に変換します

iterator(); 要素を走査するための Iterator オブジェクトを返します

次のステップも put/get メソッドです...

XMLSerializer:JSON を XML に変換するためのユーティリティ クラス。

Object

を継承するクラス

構築方法は次のとおりです。

XMLSerializer(); XMLSerializer オブジェクトを作成します

一般的な方法は次のとおりです:

setRootName(String rootName); 変換された xml のルート要素名を設定します

setTypeHintsEnabled(boolean typeHintsEnabled); 各要素に型属性を表示するかどうかを設定します

write(JSON json); json オブジェクトを XML に変換します。デフォルトの文字エンコーディングは UTF-8、

です。

エンコーディングを設定する必要がある場合は、write(JSON json, Stringエンコーディング)を使用できます

5. XML および JSON 文字列の各列の簡単な例

JSON:

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

xml

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

開始

プロジェクト名 JS で新しい Web プロジェクトを作成し、以下の 7 つの jar パッケージをインポートします。ファイルは、前の準備のパスからダウンロードされます。

注: 新しい Web プロジェクトを作成する必要はありません。通常の Java プロジェクトでもこの記事の操作を完了できます。なぜjsonパッケージ以外の6つのパッケージをインポートする必要があるのか​​については、一目で分かるようにnote.txtを最後に載せておきます。

質問1: フロントエンドから受信したjson形式の文字列をバックグラウンドで処理するにはどうすればよいですか?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。