1.1.JSONObject简介。
JSON-lib包是一个用于转换beans、集合、映射、Java数组、xml和JSON的包。
2.下载jar包。
http://xiazai.jb51.net/201707/yuanma/lib_jb51.rar
除了JSONObject的jar之外,它还提供了另外6个jar包,总共有7个jar文件。
注意:因为工作项目使用的版本是jdk1.3对应的1.1,所以这个博客是基于1.1版本的。
该版本对应的javadoc下载路径如下:http://SourceForge . net/project/JSON-lib/files/JSON-lib/JSON-lib-1.1/
目前最新版本是2.4,其他版本的下载地址是http://sourceforge.net/projects/json-lib/files/json-lib/.
3.项目环境:
系统:Win 7 MyEclipse: 6.5 Tomcat: 5.0 JDK:开发环境和编译都是1.5。
项目结构如下:
说明:这次使用的文件只是项目目录json包下的JSONObject_1_3类和note.txt。
4.classmethod基于1.1的API。
达成以下协议:
1.介绍基于JSONObject 1.1的API。
2.只介绍常用的类和方法。
3.没有介绍。这个版本不再推荐。
4.介绍的类和方法主要集中在本博客中使用的类和方法。
JSON对象:a JSON对象是名称/值对的无序集合。它是继承对象并实现JSON接口的最后一个类。
施工方法如下:
JSONObject();创建一个空的JSONObject对象。
JSONObject(布尔值为IsNull);创建一个空的或不空的JSONObject。
常见的方法如下:
对象bean静态方法,从pojo对象创建一个JSONObject对象。
fromJSONObject(JSONObject对象);静态方法,从另一个JSONObject对象构造一个JSONObject对象。
fromJSONString(JSONString字符串);静态方法,通过JSONString创建一个JSONObject对象。
toString();将jsonObject对象转换为JSON格式字符串。
迭代器();返回遍历元素的迭代器对象。
然后还有一些put/get方法,需要用普通get方法和pot方法来强调,在API中描述如下:
如果可以找到一个值,get方法返回一个值,如果找不到,则引发异常。opt方法返回默认值,而不是引发异常,因此对于获取可选值非常有用。
JSONArray:A JSONArray是一个有序的值序列。
是继承Object并实现JSON接口的最终类。
施工方法如下:
JSONArray();构造一个空的JSONArray对象。
常见的方法如下:
fromArray(对象[]数组);静态方法从java数组创建JSONArray对象。
fromCollection(集合集合);静态方法,通过集合集合对象创建一个JSONArray对象。
fromString(字符串字符串);从json格式的字符串构造json Array对象的静态方法。
toString();将jsonArray对象转换为JSON格式的字符串。
迭代器();返回遍历元素的迭代器对象。
接下来是put/get方法.
XMLSerializer:Utility实用程序类,用于将JSON转换回XML。
从对象继承的类。
施工方法如下:
XMLSerializer();创建一个XMLSerializer对象。
常见的方法如下:
设置根名称(字符串根名称);设置转换后的xml的根元素名称。
setTypeHintsEnabled(布尔类型hintsenabled);设置每个元素是否显示类型属性。
write(JSON JSON);json对象被转换成xml,默认的字符编码是UTF-8。
如果需要设置编码,可以使用write(JSON,JSON,String编码)。
5.XML和JSON字符串的每一列的简单示例。
JSON:
{ '密码' :' 123456 ','用户名' : '张三' }xml。
?xml版本='1.0 '编码='UTF-8 '?user _ info password 123456/密码用户名张三/用户名/user_infostart。
用项目名JS创建一个新的web项目,导入下面的7个jar包,下载前面准备工作中文件的路径。
注意:不需要创建新的web项目,但是普通的java项目也可以完成本文的操作。至于为什么要导入json包以外的6个包,我会在最后贴note.txt,大家一看就知道了。
问题1:如果后台从前台接收到json格式的字符串,该怎么办?
公共静态void jsonToJAVA(){ system。出去。println(' JSON字符串转爪哇岛代码');字符串jsonStr='{ '密码' :' ', '用户名' : '张三'}';JSON对象JSON对象=JSON对象。从字符串(jsonStr);string username=jsonobj。getstring(' username ');字符串密码=jsonobj。OptString('密码');系统。出去。println(' JSON-Java n username=' username ' t password=' password ');}
问题2:后台是怎么拼装json格式的字符串?
公共静态void javaToJSON(){ system。出去。println(' Java代码封装为json字符串');JSON对象JSON对象=新的JSON对象();jsonObj.put('username ','张三');jsonObj.put('password ',' ');系统。出去。println(' Java-JSON n ' jsonobj。tostring());}
问题3:json格式的字符串怎么转换为可扩展标记语言格式的字符串?
公共静态void jsontorxml(){ system。出去。println(' JSON字符串转可扩展标记语言字符串');字符串jsonStr='{ '密码' :' ', '用户名' : '张三'}';JSON对象JSON=JSON对象。FromString(JSON字符串);XMLSerializer XMLSerializer=new XMLSerializer();xmlserializer。setrootname(' user _ info ');xmlserializer。settypehintsenabled(false);字符串XML=xmlserializer。write(JSON);系统。出去。println(' JSON-XML n ' XML);}
问题4:xml格式的字符串怎么转换为json格式的字符串?
公共静态void xmlToJSON(){ system。出去。println(' XML字符串转json字符串');字符串xml='?可扩展标记语言版本= '。 '编码='UTF- '?用户_信息密码/密码用户名张三/username/user _ info ';JSON JSON=xmlserializer。读取(XML);系统。出去。println(' XML-JSON n ' JSON。tostring());}
问题5:javabean怎么转换为json字符串?
public static void JavaBean to JSON(){ system。出去。println(' JavaBean转json字符串');用户信息用户信息=新用户信息();用户信息。设置用户名('张三');用户信息。set password(' ');JSON对象JSON=JSON对象。FromBean(UserInfo);系统。出去。println(' JavaBean-JSON n ' JSON。tostring());}
问题6:javabean怎么转换为可扩展标记语言字符串?
public static void JavaBean toxml(){ system。出去。println(' JavaBean转可扩展标记语言字符串');用户信息用户信息=新用户信息();用户信息。设置用户名('张三');用户信息。set password(' ');JSON对象JSON=JSON对象。FromBean(UserInfo);XMLSerializer XMLSerializer=new XMLSerializer();字符串XML=xmlserializer。write(JSON,‘UTF-’);系统。出去。println(' JavaBean-XML n ' XML);}
完整的JSONObject_1_3.java代码如下:
JSONObject_1_3包json导入净。SF。JSON。JSON导入净。SF。JSON。JSON对象;导入净。SF。JSON。XML。xmlserializer公共类JSON对象_ _ { public static void javaToJSON(){ system。出去。println(' Java代码封装为json字符串');JSON对象JSON对象=新的JSON对象();jsonObj.put('username ','张三');jsonObj.put('password ',' ');系统。出去。println(' Java-JSON n ' jsonobj。tostring());}公共静态void jsonToJAVA(){ system。出去。println(' JSON字符串转爪哇岛代码');字符串jsonStr='{ '密码' :' ', '用户名' : '张三'}';JSON对象JSON对象=JSON对象。从字符串(jsonStr);string username=jsonobj。getstring(' username ');字符串密码=jsonobj。OptString('密码');系统。出去。println(' JSON-Java n username=' username ' t password=' password ');}公共静态void jsontorxml(){ system。出去。println(' JSON字符串转可扩展标记语言字符串');字符串jsonStr='{ '密码' :' ', '用户名' : '张三'}';JSON对象JSON=JSON对象。FromString(JSON字符串);XMLSerializer XMLSerializer=new XMLSerializer();xmlserializer。setrootname(' user _ info ');xmlserializer。settypehintsenabled(false);字符串XML=xmlserializer。write(JSON);系统。出去。println(' JSON-XML n ' XML);} public static void JavaBean TJ son(){ system。出去。println(' JavaBean转json字符串');用户信息用户信息=新用户信息();用户信息。设置用户名('张三');用户信息。set password(' ');JSON对象JSON=JSON对象。FromBean(UserInfo);系统。出去。println(' JavaBean-JSON n ' JSON。tostring());} public static void JavaBean toxml(){ system。出去。println(' JavaBean转可扩展标记语言字符串');用户信息用户信息=新用户信息();用户信息。设置用户名('张三');用户信息。set password(' ');JSON对象JSON=JSON对象。FromBean(UserInfo);XMLSerializer XMLSerializer=new XMLSerializer();字符串XML=xmlserializer。write(JSON,‘UTF-’);系统。出去。println(' JavaBean-XML n ' XML);} public static void xmlToJSON(){ system。出去。println(' XML字符串转json字符串');字符串xml='?可扩展标记语言版本= '。 '编码='UTF- '?用户_信息密码/密码用户名张三/username/user _ info ';JSON JSON=xmlserializer。读取(XML);系统。出去。println(' XML-JSON n ' JSON。tostring());} public static void main(String args[]){//javaToJSON();//JSontoJava();//JSontXMl();//JavaBeanTojson();//JavaBeanToXMl();xmlToJSON();} }完整的UserInfo.java代码如下:
用户信息包json公共类用户信息{公共字符串用户名;公共字符串密码;公共字符串getUsername(){ 0返回用户名;} public void setUsername(String username){ this。用户名=用户名;}公共字符串getPassword(){ 0返回密码;}公共void set密码(String密码){ this。密码=密码;} }结果
代码和运行结果都已经贴在每个问题的后面,运行时直接用主要的方法分别对每个方法运行即可看到测试效果。
note.txt是报的对应的错误及解决方法,也从另一个方面说明为什么需要导入前面提到的冲突包;
note.txt文件内容如下:
Java。朗。no classedeffunderror : org/Apache/commons/lang/exception/NestableRuntimeException at Java。朗。类加载器。定义类0(原生方法)在Java。朗。类加载器。定义类(类加载器。Java 3360537)在Java。保安。安全加载程序。定义类(secureclassloader。Java 3360123)在Java。净。urlclassloader。definec类(urlclassloader。Java 3360251线程“主”中的异常解决方案:导入commons-lang-2.1.jar
Java。朗。no classedeffunderror : org/Apache/commons/log factory at。净。SF。JSON。JSON对象。clinit(JSON对象。Java :125)在生成时.线程“主”中的异常解决方案:导入commons-logging.jar
在净。SF。JSON。JSON对象。put(JSON对象。Java :1806)处生成。线程“主”中的异常解决方案:导入commons-beanutils.jar
Java。朗。no class edeffunderror : net/SF/ez morph/Mopherregistry at。净。SF。JSON。乌提尔。jsonutils。clinit(jsonutils。Java :65)在。净。SF。JSON。JSON对象。set(JSON对象。Java 33602164)。净。SF。JSON。JSON对象。put(JSON对象。Java 33601853)。芬兰线程“主”中的异常解决方案:导入ezmorph-1.0.2.jar
Java。朗。no classedeffunderror : org/Apache/commons/collections/FastHashMap at org。阿帕奇。公地。比努蒂斯。属性实用程序。clinit(属性实用程序。Java :208)。净。SF。JSON。JSON对象。来自bean(JSON对象。Java :190)。净。SF。JSON。JSON对象。从对象(JSON对象。Java 3360437)在。SF。线程“主”中的异常解决方案:导入commons-collections-3.0.jar
生成时线程“主”Java。朗。无类错误: nu/XOM/串行器中出现异常。生成时的testjsonobject。jsontorxml(testjsonobject。Java :88).testjson对象。main(testjson对象。Java :96)解决方案:导入xom-1.0d10.jar
几点说明:
1.注意用户信息类的修饰符,用公众的修饰,变量用户名和密码也用公众的修饰,最好单独的写一个类,这里就不贴出来了
2.以上json字符串和可扩展标记语言字符串都是最简单的形式,实际开发中json字符串和可扩展标记语言格式比这个复杂的多,
处理复杂的json字符串,可以封装写一个类继承HashMap,然后重写其放和得到方法,以支持对类型为一[0]个.B及甲乙的键值的读取和指定
3.以上6中情况在实际开发中可能有些不存在或不常用
存在的问题:
1.使用XMLSerializer的写方法生成的可扩展标记语言字符串的中文乱码问题
2 .问题四中的红色的原木日志问题
以上内容是小编给大家介绍的JSONObject使用方法详解,希望大家喜欢。