JSON-LIB包是一个将Beans、集合、映射、Java数组、xml和JSON相互转换的包。本文介绍了如何使用jsonobject的相关知识,让感兴趣的朋友一起学习一下。
1.JSONObject介绍
JSON-LIB包是Beans、集合、映射、Java数组、xml和JSON的包。
2.下载jar包
http://xiazai.jb51.net/201707/yuanma/lib_jb51.rar
除了JSONObject的jar之外,还有六个依赖于的jar包,总共有七个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.项目环境:
系统: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 object:JSON object是名称/值对的无序集合。
是一个最终类,它继承Object并实现JSON接口。
构造方法如下:
JSON object();创建一个空JSONObject对象
JSON object(boolean is null);创建一个空JSONObject对象。
普通方法如下:
fromBean(对象bean);从pojo对象创建JSONObject对象的静态方法。
fromJSONObject(JSONObject对象);静态方法从另一个JSONObject对象构造一个JSONObject对象。
fromJSONString(JSONString字符串);通过JSONString创建JSONObject对象的静态方法。
toString();将jsonObject对象转换为JSON格式字符串
迭代器();返回一个迭代器对象来遍历元素。
接下来还有一些put/get方法,需要普通get方法和pot方法来强调。这在API中有描述:
如果能找到一个值,get方法就返回值,如果找不到,就抛出异常。opt方法返回默认值,而不是抛出异常,因此对于获取可选值非常有用。
JSON array:JSON array是有序的值序列。
是一个最终类,它继承Object并实现JSON接口。
构造方法如下:
JSON array();构造一个空的JSONArray对象
普通方法如下:
from array(Object[]array);从java数组创建JSONArray对象的静态方法。
fromCollection(集合集合);静态方法通过collection集合对象创建JSONArray对象。
fromString(字符串String);从JSON格式的字符串构造jsonArray对象的静态方法。
toString();将jsonArray对象转换为JSON格式字符串
迭代器();返回一个迭代器对象来遍历元素。
接下来是put/get方法.
XMLSerializer:用于将JSON转换为XML的实用程序类。
从对象继承的类
构造方法如下:
XML serializer();创建XMLSerializer对象
普通方法如下:
setRootName(字符串root name);设置转换后的xml的根元素名称。
setTypeHintsEnabled(布尔型hintsenabled);设置每个元素是否显示type属性。
写(JSON JSON);将json对象转换为xml,默认的字符编码是UTF-8,
可以使用write(JSON json,String encoding)来设置编码。
5.对XML和JSON字符串各列一个简单的例子
JSON:
{ '密码':' 123456 ','用户名':'张三' }
xml
?xml版本='1.0 '编码='UTF-8 '?
用户信息
密码123456/密码
用户名张三/用户名
/用户信息
start
创建一个新的web项目,项目名为JS,并导入以下七个jar包。文件是在前期准备工作中下载的。
注意:不需要新建web项目,普通java项目也可以完成本文中的操作。至于为什么要导入json包以外的6个包,我会在最后贴上note.txt,大家一目了然。
问题1:后台接收到的json格式字符串到前台应该怎么处理?
公共静态void jsonToJAVA() {
System.out.println('json字符串转Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)代码');
String jsonStr='{'password ':' username ':'张三'}';
JSON对象JSON obj=JSON对象。from string(JSON str);
字符串username=JSON obj。getstring(“用户名”);
字符串password=JSON obj。optstring(“password”);
系统。出去。println(' JSON-Java \ n用户名='用户名
\ t password=' password);
}
问题2:后台是怎么拼装json格式的字符串?
公共静态void javaToJSON() {
System.out.println('java代码封装为json字符串');
JSON object JSON obj=new JSON object();
jsonObj.put('username ','张三');
jsonObj.put('password ',' ');
系统。出去。println(' Java-JSON \ n ' JSON obj。tostring());
}
问题3:json格式的字符串怎么转换为可扩展标记语言格式的字符串?
公共静态void jsonToXML() {
System.out.println('json字符串转可扩展标记语言字符串');
String jsonStr='{'password ':' username ':'张三'}';
JSON对象JSON=JSON对象。from string(JSON str);
XML serializer XML serializer=new XML serializer();
XML序列化程序。setroot名称(“user _ info”);
XML序列化程序。settypehintsenabled(false);
字符串XML=XML序列化程序。写(JSON);
系统。出去。println(' JSON-XML \ n ' XML);
}
问题4:xml格式的字符串怎么转换为json格式的字符串?
公共静态void xmlToJSON(){
System.out.println('xml字符串转json字符串');
字符串xml='?可扩展标记语言版本='。编码='UTF-'?用户信息密码/密码用户名张三/用户名/用户信息;
JSON JSON=XML序列化程序。read(XML);
系统。出去。println(' XML-JSON \ n ' JSON。tostring());
}
问题5:javabean怎么转换为json字符串?
公共静态void javaBeanToJSON() {
System.out.println('javabean转json字符串');
UserInfo UserInfo=new UserInfo();
userInfo.setUsername('张三');
用户信息。设置密码(" ");
JSON对象JSON=JSON对象。来自bean(userInfo);
系统。出去。println(' JavaBean-JSON \ n ' JSON。tostring());
}
问题6:javabean怎么转换为可扩展标记语言字符串?
公共静态void javaBeanToXML() {
System.out.println('javabean转可扩展标记语言字符串');
UserInfo UserInfo=new UserInfo();
userInfo.setUsername('张三');
用户信息。设置密码(" ");
JSON对象JSON=JSON对象。来自bean(userInfo);
XML serializer XML serializer=new XML serializer();
字符串XML=XML序列化程序。写(JSON,' UTF-');
系统。出去。println(' JavaBean-XML \ n ' XML);
}
完整的JSONObject_1_3.java代码如下:
JSON对象_1_3
包json
导入网。SF。JSON。JSON
导入网。SF。JSON。JSON对象;
导入网。SF。JSON。XML。XML序列化程序;
公共类JSONObject__ {
公共静态void javaToJSON() {
System.out.println('java代码封装为json字符串');
JSON object JSON obj=new JSON object();
jsonObj.put('username ','张三');
jsonObj.put('password ',' ');
系统。出去。println(' Java-JSON \ n ' JSON obj。tostring());
}
公共静态void jsonToJAVA() {
System.out.println('json字符串转Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)代码');
String jsonStr='{'password ':' username ':'张三'}';
JSON对象JSON obj=JSON对象。from string(JSON str);
字符串username=JSON obj。getstring(“用户名”);
字符串password=JSON obj。optstring(“password”);
系统。出去。println(' JSON-Java \ n用户名='用户名
\ t password=' password);
}
公共静态void jsonToXML() {
System.out.println('json字符串转可扩展标记语言字符串');
String jsonStr='{'password ':' username ':'张三'}';
JSON对象JSON=JSON对象。from string(JSON str);
XML serializer XML serializer=new XML serializer();
XML序列化程序。setroot名称(' user _ info ');
XML序列化程序。settypehintsenabled(false);
字符串XML=XML序列化程序。写(JSON);
系统。出去。println(' JSON-XML \ n ' XML);
}
公共静态void javaBeanToJSON() {
System.out.println('javabean转json字符串');
UserInfo UserInfo=new UserInfo();
userInfo.setUsername('张三');
用户信息。设置密码(" ");
JSON对象JSON=JSON对象。来自bean(userInfo);
系统。出去。println(' JavaBean-JSON \ n ' JSON。tostring());
}
公共静态void javaBeanToXML() {
System.out.println('javabean转可扩展标记语言字符串');
UserInfo UserInfo=new UserInfo();
userInfo.setUsername('张三');
用户信息。设置密码(" ");
JSON对象JSON=JSON对象。来自bean(userInfo);
XML serializer XML serializer=new XML serializer();
字符串XML=XML序列化程序。写(JSON,' UTF-');
系统。出去。println(' JavaBean-XML \ n ' XML);
}
公共静态void xmlToJSON(){
System.out.println('xml字符串转json字符串');
字符串xml='?可扩展标记语言版本='。编码='UTF-'?用户信息密码/密码用户名张三/用户名/用户信息;
JSON JSON=XML序列化程序。read(XML);
系统。出去。println(' XML-JSON \ n ' JSON。tostring());
}
公共静态void main(String args[]) {
//Java to JSON();
//jsonToJAVA();
//jsonToXML();
//JavaBean to JSON();
//JavaBean to XML();
XML to JSON();
}
}
完整的UserInfo.java代码如下:
用户信息
包json
公共类用户信息{
公共字符串用户名;
公共字符串密码;
公共字符串getUsername() {
返回用户名;
}
公共void setUsername(字符串用户名){
this .用户名=用户名;
}
公共字符串getPassword() {
返回密码;
}
公共void setPassword(字符串密码){
this.password=密码;
}
}
result
代码和运行结果都已经贴在每个问题的后面,运行时直接用主要的方法分别对每个方法运行即可看到测试效果。
note.txt是报的对应的错误及解决方法,也从另一个方面说明为什么需要导入前面提到的冲突包;
note.txt文件内容如下:
Java。郎。noclassdeffounderror:org/Apache/commons/lang/exception/NestableRuntimeException
位于Java。郎。类别载入器。定义类别0(本地方法)
位于Java。郎。类别载入器。定义类(类加载器。Java:537)
位于Java。安全。安全类加载器。定义类(安全类加载器。Java:123)
位于Java。网。URL类加载器。定义类(URL类加载器。Java:251)
在Java。网。URL类加载器。访问100美元(URLClassLoader.java:55)
位于Java。网。URL类加载器$1。运行(URL类加载器。Java:194)
在爪哇。安全。门禁控制器。特权(原生方法)
位于Java。网。URL类加载器。查找类(URL类加载器。Java:187)
位于Java。郎。类别载入器。加载类(类加载器。Java:289)
看着孙。杂项启动器$应用程序类加载器。加载类(启动器。Java:274)
位于Java。郎。类别载入器。加载类(类加载器。Java:235)
位于Java。郎。类别载入器。loadclassinternal(类加载器。Java:302)
在生成时testjsonobject。main(testjsonobject。Java:40)
线程"主要"中出现异常
解决方案:导入commons-lang-2.1.jar
Java。郎。noclassdeffounderror:org/Apache/commons/logging/log factory
在网上。SF。JSON。JSON对象。clinit(JSON对象。Java:125)
在生成时testjsonobject。main(testjsonobject。Java:40)
线程"主要"中出现异常
解决方案:导入commons-logging.jar
Java。郎。noclassdeffounderror:org/Apache/commons/bean utils/dyna bean
在网上。SF。JSON。JSON对象。set(JSON对象。Java:2164)
在网上。SF。JSON。JSON对象。put(JSON对象。爪哇:1853年)
在网上。SF。JSON。JSON对象。put(JSON对象。Java:1806年)
在生成时testjsonobject。main(testjsonobject。Java:41)
线程"主要"中出现异常
解决方案:导入commons-beanutils.jar
Java。郎。noclassdeffounderror:net/SF/ez morph/MorpherRegistry
在网上。SF。JSON。util。jsonutils。clinit(jsonutils。Java:65)
在网上。SF。JSON。JSON对象。set(JSON对象。Java:2164)
在网上。SF。JSON。JSON对象。put(JSON对象。爪哇:1853年)
在网上。SF。JSON。JSON对象。put(JSON对象。Java:1806年)
在生成时testjsonobject。main(testjsonobject。Java:41)
线程"主要"中出现异常
解决方案:导入ezmorph-1.0.2.jar
Java。郎。noclassdeffounderror:org/Apache/commons/collections/fast hashmap
位于org。阿帕奇。公地。豆制品。财产效用。clinit(属性实用工具。Java:208)
在网上。SF。JSON。JSON对象。来自bean(JSON对象。Java:190)
在网上。SF。JSON。JSON对象。from对象(JSON对象。Java:437)
在网上。SF。JSON。JSON对象。set(JSON对象。Java:2196)
在网上。SF。JSON。JSON对象。put(JSON对象。爪哇:1853年)
在网上。SF。JSON。JSON对象。put(JSON对象。Java:1806年)
在生成时testjsonobject。main(testjsonobject。Java:41)
线程"主要"中出现异常
解决方案:导入commons-collections-3.0.jar
线程“主”Java。郎。noclassdeffounderror中出现异常:nu/XOM/串行器
在生成时testjsonobject。jsontoxml(testjsonobject。Java:88)
在生成时。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.问题4中的红色日志日志问题
以上是边肖介绍的JSONObject用法的详细说明。我希望你喜欢它。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。