Json 和 Jsonlib 的使用
一.什么是 Json
JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。
A.JSON 的两种结构
1.“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以将它理解成 HashMap。
对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。
示例:var json = {"name":"Jack","age":90,"Marray":true};
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(Array 或 List)。
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];
二.Json-lib
Json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
转换 json 格式数据成为 javabeans 对象
Json-lib 需要的 jar 包
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
Json-lib 的使用
1. 将 Array 解析成 Json 串。使用 JSONArray 可以解析 Array 类型:
package cn.sunzn.json;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
public class JsonLib {
public static void main(String[] args) {
/**
* 将 Array 解析成 Json 串
*/
String[] str = { "Jack", "Tom", "90", "true" };
JSONArray json = JSONArray.fromObject(str);
System.err.println(json);
/**
* 对像数组,注意数字和布而值
*/
Object[] o = { "北京", "上海", 89, true, 90.87 };
json = JSONArray.fromObject(o);
System.err.println(json);
/**
* 使用集合类
*/
List<String> list = new ArrayList<String>();
list.add("Jack");
list.add("Rose");
json = JSONArray.fromObject(list);
System.err.println(json);
/**
* 使用 set 集
*/
Set<Object> set = new HashSet<Object>();
set.add("Hello");
set.add(true);
set.add(99);
json = JSONArray.fromObject(set);
System.err.println(json);
}
}
运行结果如下:
["Jack","Tom","90","true"]
["北京","上海",89,true,90.87]
["Jack","Rose"]
[99,true,"Hello"]
2. 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:
package cn.sunzn.json;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
public class JsonLib {
@SuppressWarnings("static-access")
public static void main(String[] args) {
/**
* 解析 HashMap
*/
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Tom");
map.put("age", 33);
JSONObject jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject);
/**
* 解析 JavaBean
*/
Person person = new Person("A001", "Jack");
jsonObject = jsonObject.fromObject(person);
System.out.println(jsonObject);
/**
* 解析嵌套的对象
*/
map.put("person", person);
jsonObject = jsonObject.fromObject(map);
System.out.println(jsonObject);
}
}
运行结果如下:
{"age":33,"name":"Tom"}
{"id":"A001","name":"Jack"}
{"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}
3. 使用 JsonConfig 过虑属性:适用于 JavaBean/Map
package cn.sunzn.json;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
public class JsonLib {
public static void main(String[] args) {
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "name" }); // 指定在转换时不包含哪些属性
Person person = new Person("A001", "Jack");
JSONObject jsonObject = JSONObject.fromObject(person, config); // 在转换时传入之前的配置对象
System.out.println(jsonObject);
}
}
运行结果如下,在运行结果中我们可以看到 name 属性被过滤掉了:
{"id":"A001"}
4. 将 Json 串转换成 Array:
package cn.sunzn.json;
import java.util.Arrays;
import net.sf.json.JSONArray;
public class JsonLib {
public static void main(String[] args) {
JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
Object array = JSONArray.toArray(jsonArray);
System.out.println(array);
System.out.println(Arrays.asList((Object[]) array));
}
}
运行结果如下:
[Ljava.lang.Object;@1e5003f6
[89, 90, 99]
5. 将 Json 串转成 JavaBean/Map:
package cn.sunzn.json;
import java.util.Map;
import net.sf.json.JSONObject;
public class JsonLib {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
/**
* 将 Json 形式的字符串转换为 Map
*/
String str = "{\"name\":\"Tom\",\"age\":90}";
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
System.out.println(map);
/**
* 将 Json 形式的字符串转换为 JavaBean
*/
str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
jsonObject = JSONObject.fromObject(str);
System.out.println(jsonObject);
Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
System.out.println(person);
}
}
运行结果如下:
{age=90, name=Tom}
Person [id=A001, name=Jack]
在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误:
Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
at net.sf.json.JSONObject.toBean(JSONObject.java:288)
at net.sf.json.JSONObject.toBean(JSONObject.java:233)
at cn.sunzn.json.JsonLib.main(JsonLib.java:23)
Caused by: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)
at net.sf.json.JSONObject.toBean(JSONObject.java:282)
... 2 more
分享到:
相关推荐
jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib需要jar包jsonlib...
1. **JSON解析和生成**:JSON Lib可以将JSON字符串解析成JSON对象,反之亦然。这对于与服务器进行数据交互非常有用,比如AJAX请求。 2. **JSON对象操作**:库中包含了一系列类,如JSONObject、JSONArray,它们分别...
在本资源中,我们有一个名为`json_lib.lib`的预编译库,它适用于两种不同的处理器架构:64位和32位。这意味着无论你的项目是为64位还是32位系统构建,都可以使用这个库进行JSON操作。 `json_lib.lib`是一个静态链接...
使用JsonLib可以轻松地将Java对象转换为JSON字符串,或者将JSON字符串反序列化为Java对象,这对于数据交换和存储非常有用。 在Java项目中使用JsonLib时,首先需要将必要的jar包引入到项目的类路径中。以下是JsonLib...
对于`json-lib.jar`,开发者应该查阅`json.LICENSE`以确保遵循正确的使用条款,以避免法律问题。 总的来说,`json-lib.jar`是一个强大的JSON处理工具,为Java开发者提供了一种简单的方式来处理JSON数据,广泛应用于...
json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码json lib最新源代码...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C家族语言...在实际项目中,正确理解和使用JSON Lib,能够有效提升JSON数据处理的效率和质量。
要使用 `json-lib` 实现 JSON 与 Java 对象的互转,首先需要在项目中引入该库。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml <groupId>net.sf.json-lib</groupId> <artifactId>json-lib...
JSONLib是一个广泛使用的Java库,它提供了一系列的方法来序列化和反序列化Java对象为JSON字符串。 **JSON的基本结构与数据类型** 1. **对象(Object)**: JSON中的对象以大括号{}表示,由键值对组成,键和值之间用...
在实际应用中,使用JSONlib可以方便地进行JSON数据的解析和生成,例如,你可以创建一个JSON对象,添加键值对,然后将其转换为字符串发送给服务器;反之,接收到服务器返回的JSON字符串后,可以通过JSONlib解析为Java...
4. **兼容性**:JSON-lib兼容Java SE和Java EE环境,可以方便地在Web应用、企业服务和桌面应用中使用。 5. **错误处理**:提供了详细的异常处理机制,帮助开发者快速定位和解决问题。 在实际应用中,使用JSON-lib...
在使用Jsonlib时,首先需要将其引入到你的项目中。如果你的项目是Maven项目,可以在pom.xml文件中添加依赖。接着,你可以通过JsonSerializer和JsonParser等类来实现JSON的序列化和反序列化。例如,你可以将一个Java...
在文件列表中的"jsonlib需要jar包",这可能是指包含了`json-lib`库及其所有依赖的JAR文件。在实际项目中,将这些JAR文件添加到项目的类路径(classpath)中,就可以使用`json-lib`提供的功能,而无需通过Maven或其他...
1. 简单易用:json-lib的API简单易于使用,一般只需要一行或两行代码就可以完成Java对象和JSON的相互转换。 2. 支持对象图:可以将复杂的对象层次结构与JSON相互转换,支持List、Map、数组等类型。 3. 支持注解:支持@...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web开发中,它易于人阅读和编写,同时也易于机器解析和生成。在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列...
标题中的"json-lib-0.8.jar"和"json-lib-0.9.jar"代表了JSON-lib的不同版本。每个版本可能包含一些新特性、修复的错误或者性能改进。例如,从0.8到0.9的升级,可能意味着开发团队已经对库进行了一些优化,增加了新的...
总结来说,这个资源提供了一个编译好的JSON处理库,开发者可以通过引用json.h头文件和链接lib文件,在自己的C++项目中方便地进行JSON数据的解析和生成,大大简化了与JSON数据交互的工作。无论是进行网络通信、存储...
jsonlib及其依赖jar包,它包括commons-beanutils.jar,commons-collections.jar,commons-lang.jar,commons-logging-1.2.jar, ezmorph-1.0.6.jar,json-lib-2.4-jdk15.jar,这些库可以满足转化Java对象到json的...