一.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 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
转换 json 格式数据成为 javabeans 对象
二. 将 Array,List,Set 解析成 Json 串
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);
}
}
三.将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:
实体类Person
package com.lrq.entity;
public class Person {
private String ID;
private String name;
public Person() {
}
public Person(String iD, String name) {
ID = iD;
this.name = name;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((ID == null) ? 0 : ID.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (ID == null) {
if (other.ID != null)
return false;
} else if (!ID.equals(other.ID))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Person [ID=" + ID + ", name=" + name + "]";
}
}
JavaBean/Map解析成Json串
package com.lrq.test;
import java.util.HashMap;
import java.util.Map;
import com.lrq.entity.Person;
import net.sf.json.JSONObject;
public class JsonBean {
@SuppressWarnings("static-access")
public static void main(String[] args) {
/**
* 解析 HashMap
*/
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "朽木白哉");
map.put("age", 24);
JSONObject jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject);
/**
* 解析 JavaBean
*/
Person person = new Person("ID001", "SongSong");
jsonObject = jsonObject.fromObject(person);
System.out.println(jsonObject);
/**
* 解析嵌套的对象
*/
map.put("person", person);
jsonObject = jsonObject.fromObject(map);
System.out.println(jsonObject);
}
}
结果:
四.使用 JsonConfig 过滤属性:适用于 JavaBean/Map
package com.lrq.test;
import com.lrq.entity.Person;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
public class JsonConfigDemo {
public static void main(String[] args) {
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "name" }); // 指定在转换时不包含哪些属性
Person person = new Person("ID001", "SongSong");
JSONObject jsonObject = JSONObject.fromObject(person, config); // 在转换时传入之前的配置对象
System.out.println(jsonObject);
}
}
测试结果:
五.将 Json串转换成 ObjectArray
package com.lrq.test;
import java.util.Arrays;
import net.sf.json.JSONArray;
public class JsonToArray {
public static void main(String[] args) {
//将JsonArray转化为Object
JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
Object array = JSONArray.toArray(jsonArray);
System.out.println(array);
//将Object强转成 Object数组转List打印输出
System.out.println(Arrays.asList((Object[])array));
}
}
测试结果:
六.将 Json 串转成 JavaBean/Map:
package com.lrq.test;
import java.util.Map;
import com.lrq.entity.Person;
import net.sf.json.JSONObject;
public class JsonToBeanAndMap {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
/**
* 将 Json 形式的字符串转换为 Map
*/
String str = "{\"name\":\"Henry\",\"age\":20}";
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\":\"id001\",\"name\":\"SongSong\"}";
jsonObject = JSONObject.fromObject(str);
System.out.println(jsonObject);
Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
System.out.println(person);
}
}