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.
を実装します。
構築方法は次のとおりです。
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
<?xml version="1.0" encoding="UTF-8"?> <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 = "<?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怎么转换为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使用方法详解,希望大家喜欢。