【Java基础】Json小结

一、宏观

       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.











评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值