【Java基础】Json小结

来源:互联网 发布:mac跟win 编辑:程序博客网 时间:2024/06/01 10:14

一、宏观

       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.