· 什么是 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 成为理想的数据交换语言。
· 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需要的包
因为项目是用Maven构建的,所有只需在项目pom.xml中添加如下该包的坐标
<!-- https://mvnrepository.com/artifact/org.kohsuke.stapler/json-lib -->
<dependency>
<groupId>org.kohsuke.stapler</groupId>
<artifactId>json-lib</artifactId>
<version>2.1-rev6</version>
</dependency>
测试代码如下
package trade.axht.json.Test;
import java.util.Arrays;
import net.sf.json.*;
import java.util.*;
import org.junit.Test;
import trade.axht.json.Person;
import junit.framework.TestCase;
public class JsonTest extends TestCase {
/**
* 将Array解析成Json串,使用JSONArray可以解析Array类型。
* Json有两种数据结构:
* 1 "名称/值"对的集合。
* 2 值的有序列表
*/
@Test
public void testArrayToJson(){
String[] str={"Java","C","C#"};
JSONArray jsonArray=JSONArray.fromObject(str);
System.out.println(jsonArray);
jsonArray=JSONArray.fromObject(new Object[]{"北京","上海",89,true,90.87});
System.out.println(jsonArray);
jsonArray=JSONArray.fromObject(Arrays.asList("上海","北京","四川"));
System.out.println(jsonArray);
Set<Object> set=new HashSet<Object>();
set.add("ab"); set.add(true);
System.out.println(JSONArray.fromObject(set));
}
@Test
public void testJSONObject(){
//解析HashMap
Map<String,Object> map=new HashMap<String,Object>();
map.put("name", "Brozer");
map.put("age", 21);
JSONObject jsonObject=JSONObject.fromObject(map);
System.out.println(jsonObject);
//解析JavaBean
Person person=new Person("Brozer", "Man", 21, "BRIEF BUT NOT SIMPLE");
jsonObject=JSONObject.fromObject(person);
System.out.println(jsonObject);
//解析嵌套的对象
map.put("person",person);
jsonObject=JSONObject.fromObject(map);
System.out.println(jsonObject);
}
/**
*使用JsonConfig过滤属性:适用于JavaBean/Map
*/
@Test
public void testJsonConfig(){
JsonConfig jsonConfig=new JsonConfig();
//指定在转换时不包含哪些属性
jsonConfig.setExcludes(new String[]{"name"});
Person person=new Person("Brozer", "man", 21, "BRIEF BUT NO SIMPLE");
JSONObject jsonObject=JSONObject.fromObject(person, jsonConfig);
System.out.println(jsonObject);
}
@Test
public void testJsonToArray(){
//将Json串转换成Array
JSONArray jsonArray=JSONArray.fromObject("[89,90,99]");
Object array=JSONArray.toArray(jsonArray);
System.out.println(array);
System.out.println(Arrays.asList((Object[])array));
//将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形式的字符串转成Bean
str="{\"name\":\"Brozer\",\"age\":21,\"sex\":\"man\",\"description\":\"BRIEF BUT NOT SIMPLE\"}";
jsonObject=JSONObject.fromObject(str);
Person person=(Person) jsonObject.toBean(Person.class);
System.out.println(person);
}
}
Person.java
package trade.axht.json;
public class Person {
private String name;
private String sex;
private int age;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Person(String name, String sex, int age, String description) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.description = description;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age
+ ", description=" + description + "]";
}
}
注意:复制时请修改包名。