一、宏观
1、Json是什么?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,特点:易于人阅读和编写 。具体参考:
(1)维基百科:https://zh.wikipedia.org/wiki/JSON
(2)Json官网:http://www.json.org.cn/
2、Json用在哪里?
处理Javascript 和web服务器端的之间数据交换 (例如Ajax)。
3、为什么使用Json?
1.数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小。
2.易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的读取。
3.因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护。
二、Json基本语法
1)Json语法视为JS语法的子集,内容包括:
1.名称/值对数据表示
2.大括号持有的对象和每个名称后跟“:”(冒号),名称/值对的分离,(逗号)。
3.方括号持有数组和值,(逗号)分隔。
2)JSON支持以下两种数据结构:
1.名称/值对的集合: 此数据结构支持由不同的编程语言。
2.值的有序列表: 它包括数组,列表,向量或序列等。
基本语法示例:
{
"book": [
{
"id":"01",
"language": "Java",
"edition": "third",
"author": "Herbert Schildt"
},
{
"id":"07",
"language": "C++",
"edition": "second"
"author": "E.Balagurusamy"
}]
}
3)基本数据类型支持
如上图所示,在Json中,有8中数据类型支持。强调其中两种数据类型的写法:
1.Array
{
"books": [
{ "language":"Java" , "edition":"second" },
{ "language":"C++" , "lastName":"fifth" },
{ "language":"C" , "lastName":"third" }
]
}
2.Object
{
"id": "011A",
"language": "JAVA",
"price": 500,
}
这里仅仅需要注意,在Json语法中,[]表示数组,{}表示对象就ok。
三、Json在Java语言中的使用
(1)安装JSON模块:JSON.simple
(2)常用对象:JsonObject,JsonArray
(3)JSON和Java实体之间的映射
相比上述的Json语法中的8种数据类型,这里少了whitespace和value,这两个正好在Java中也不存在。
(4)最常用的两个Json对象
1.JsonObject
1)“put”方法
import net.sf.json.JSONObject;
public class TestJson {
private static JSONObject json = null;
public static void main(String[] args) {
json = new JSONObject();
json.put("id","1");
json.put("name","张三");
json.put("pwd","123456");
System.out.println(json);
}
}
put操作用于向json对象中添加数据,添加元素和Map集合的方式一样。程序执行结果:{"id":"1","name":"张三","pwd":"123456"}。
2)“element”方法
如上demo,可以在给json添加属性时,使用
json.element("id","1");
这种形式。
3)将json对象放进一个JavaBean当中
结合上述demo
User user = new User();
//通过其Key获取对应的Value.
user.setId(Integer.parseInt(json.getString("id")));
这样,就将json对象,存入到了JavaBean对象当中。
2.JsonArray
1)"add"方法
JSONArray jsonArray = new JSONArray();
jsonArray.add(0,"张三");
jsonArray.add(1,"张四");
jsonArray.add(2,"张五");
jsonArray.add(3,"张六");
System.out.println(jsonArray);
//["张三","李四","王五","小三"]
System.out.println(jsonArray.get(1));
//李四
其余参考API:
http://docs.oracle.com/javaee/7/api/javax/json/JsonArray.html
3.Object转String
key:用Object对象构造一个JSONObject或者JSONArray对象,然后调用它的toString()方法即可。
(1)JsonObject
Book book=new Book();
book.setName("Java");
book.setPrice(52.3f);
JSONObject object=JSONObject.fromObject(book);
System.out.println(object.toString()); //如果直接object.toString(),可以看看,仅仅是一个HashCode
(2)JsonArray
Book book=new Book();
book.setName("Java");
book.setPrice(52.3f);
Book book2=new Book();
book2.setName("C");
book2.setPrice(42.3f);
List list=new ArrayList();
list.add(book);
list.add(book2);
JSONArray arry=JSONArray.fromObject(list);
System.out.println(arry.toString());
结果:[{"name":"Java","price":52.3},{"name":"C","price":42.3}]
4.String到Object
key:要先用String对象构造一个JSONObject或者JSONArray对象
(1)JsonObject
String json="{name:'Java',price:52.3}";
JSONObject object=JSONObject.fromObject(json);
System.out.println(object.get("name")+" "+object.get("price"));
(2)JsonArray
String json="[{name:'Java',price:52.3},{name:'C',price:42.3}]";
JSONArray array=JSONArray.fromObject(json);
for(int i=0;i< array.size();i++){
Map o=(Map)array.get(i);
System.out.println(o.get("name")+" "+o.get("price"));
}
5.String到Bean
(1)单个Bean对象
String json="{name:'Java',price:52.3}";
JSONObject object=JSONObject.fromObject(json);
Product product=(Product)JSONObject.toBean(object,Product.class);
System.out.println(product.getName()+" "+product.getPrice());
(2)数组Bean
String json="[{name:'Java',price:52.3},{name:'C',price:42.3}]";
JSONArray array=JSONArray.fromObject(json);
Product[] products=(Product[]) JSONArray.toArray(array,Product.class);
for(Product p:products){
System.out.println(p.getName()+" "+p.getPrice());
}
更多使用请参考API。
6.网上搜到的一个自定义Json操作类(静态)
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonHelper {
//从普通的Bean转换为字符串
public static String getJson(Object o){
JSONObject jo=JSONObject.fromObject(o);
return jo.toString();
}
//从Java的列表转换为字符串
public static String getJson(List list){
JSONArray ja=JSONArray.fromObject(list);
return ja.toString();
}
//从Java对象数组转换为字符串
public static String getJson(Object[] arry){
JSONArray ja=JSONArray.fromObject(arry);
return ja.toString();
}
//从json格式的字符串转换为Map对象
public static Map getObject(String s){
return JSONObject.fromObject(s);
}
//从json格式的字符串转换为List数组
public static List getArray(String s){
return JSONArray.fromObject(s);
}
//从json格式的字符串转换为某个Bean
public static Object getObject(String s,Class cls){
JSONObject jo=JSONObject.fromObject(s);
return JSONObject.toBean(jo, cls);
}
//从json格式的字符串转换为某类对象的数组
public static Object getArray(String s,Class cls){
JSONArray ja=JSONArray.fromObject(s);
return JSONArray.toArray(ja, cls);
}
}
That's all.