• json入门教程+在java中的一些便捷操作


    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript的交互。相比XML,他更易于人阅读和编写,它是JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,可以在流行的语言中使用,比如C# Java C++ VB。这些特性使JSON成为理想的数据交换语言。

    一、Json的构建结构

       1. “键/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。

    2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

    这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

    二、JSon具体表现形式

    1、对象是一个无序的“‘键/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

    2、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

    3、值(value)可以是双引号括起来的字符(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

    4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

    一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。

    5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

    在javascript中

    大家可以自己试试看!

    三、JSon在Java中应用

    废话不说直接上代码!!这里我用的Junit做的测试,如果不懂的童鞋可以学习一下,我的演示相对简单。

    package com.jelly.json.test;
    
    import static org.junit.Assert.assertEquals;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import net.sf.ezmorph.object.DateMorpher;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    import net.sf.json.util.JSONUtils;
    
    import org.apache.commons.beanutils.PropertyUtils;
    import org.junit.Test;
    
    import com.jelly.json.entity.MyBean;
    import com.jelly.json.entity.Person;
    import com.jelly.json.entity.Student;
    
    @SuppressWarnings("unchecked")
    public class JsonTest {
    
    private static void setDataFormat2JAVA(){
    //设定日期转换格式
    JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
    } 
    
        //json转成Object
        @Test
        public void testJsonToObj(){
        String json = "{id:'1001',name:'张三',age:22}";
            Student stu = null;
            setDataFormat2JAVA();
            JSONObject obj = JSONObject.fromObject(json);
            stu = (Student)JSONObject.toBean(obj, Student.class);
            System.out.println(stu);
        }
        
        //从一个JSON数组得到一个java对象数组
        @Test
        public void testJsonArrToArray(){
        String jsonStus = "[{id:1,name:'jack',age:20},{id:2,name:'rose',age:20},{id:3,name:'admin',age:20}]";
        JSONArray array = JSONArray.fromObject(jsonStus);
        Student[] stu = new Student[array.size()];
        for(int i = 0; i < array.size(); i++){
        JSONObject jsonObject = array.getJSONObject(i);
        stu[i] = (Student)JSONObject.toBean(jsonObject, Student.class);
        }
        System.out.println(stu[0]);
        System.out.println(stu[1]);
        System.out.println(stu[2]);
        //System.out.println(stu[3]);会报错
        }
        
        //从一个JSON数组得到一个java集合
        @Test
        public void testJsonArrToList(){
        String jsonStus = "[{id:1,name:'jack',age:20},{id:2,name:'rose',age:20},{id:3,name:'admin',age:20}]";
        JSONArray array = JSONArray.fromObject(jsonStus);
        List stu = new ArrayList();
        for(int i = 0; i < array.size(); i++){
        JSONObject jsonObject = array.getJSONObject(i);
        stu.add((Student)JSONObject.toBean(jsonObject, Student.class));
        }
        System.out.println(stu.get(0));
        System.out.println(stu.get(1));
        System.out.println(stu.get(2));
        }
        //从json数组中得到相应java数组 
        @Test
        public void testArrayForJson(){
        String jsonString = "['q','c','d']";
        JSONArray jsonArray = JSONArray.fromObject(jsonString);
        Object[] strs = jsonArray.toArray();
            System.out.print(strs[0]);
            System.out.print(strs[1]);
            System.out.print(strs[2]);
        }
        
        //字符串转换成json
        @Test
        public void testJsonStrToJSON(){
        String json = "['json','is','easy']";
            JSONArray jsonArray = JSONArray.fromObject( json );  
            System.out.println( jsonArray );  
            // prints ["json","is","easy"]  
        }
        
        //Map转换成json
        @Test
        public void testMapToJSON(){
            Map map = new HashMap();  
            map.put( "name", "jack" );  
            map.put( "bool", Boolean.TRUE );  
            map.put( "int", new Integer(1) );  
            map.put( "arr", new String[]{"a","b"} );  
            map.put( "func", "function(i){ return this.arr[i]; }" );  
            
            JSONObject jsonObject = JSONObject.fromObject( map );  
            System.out.println( jsonObject );
        }
        
        //java对象转换为json格式
        @Test
        public void testObjToJson(){
        JSONObject obj2=new JSONObject();
        obj2.put("phone","123456");
        obj2.put("zip","7890");
        obj2.put("contact",obj2);
        System.out.print(obj2);
        }
        
        //复合类型bean转成成json
        @Test
        public void testBeadToJSON(){
            MyBean bean = new MyBean();
            bean.setId("001");
            bean.setName("银行卡");
            bean.setDate(new Date());
            
            List cardNum = new ArrayList();
            cardNum.add("农行");
            cardNum.add("工行");
            cardNum.add("建行");
            cardNum.add(new Person("test"));
            
            bean.setCardNum(cardNum);
            
            JSONObject jsonObject = JSONObject.fromObject(bean);
            System.out.println(jsonObject);
            
        }
        
        //一般数组转换成JSON
        @Test
        public void testArrayToJSON(){
            boolean[] boolArray = new boolean[]{true,false,true};  
            JSONArray jsonArray = JSONArray.fromObject( boolArray );  
            System.out.println( jsonArray );  
        }
        
        //Collection对象转换成JSON
        @Test
        public void testListToJSON(){
            List list = new ArrayList();  
            list.add( "first" );
            list.add( "second" );
            JSONArray jsonArray = JSONArray.fromObject( list );  
            System.out.println( jsonArray );  
            // prints ["first","second"]  
        }
        
        //普通类型的json转换成对象
        @Test
        public void testJsonToObject() throws Exception{
            String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";  
            JSONObject jsonObject = JSONObject.fromObject( json ); 
            System.out.println(jsonObject);
            Object bean = JSONObject.toBean( jsonObject ); 
            assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );  
            assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );  
            assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );  
            assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );  
            assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );  
            System.out.println(PropertyUtils.getProperty(bean, "name"));
            System.out.println(PropertyUtils.getProperty(bean, "bool"));
            System.out.println(PropertyUtils.getProperty(bean, "int"));
            System.out.println(PropertyUtils.getProperty(bean, "double"));
            System.out.println(PropertyUtils.getProperty(bean, "func"));
            System.out.println(PropertyUtils.getProperty(bean, "array"));
            
            List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
            for(Object object : arrayList){
                System.out.println(object);
            }
            
        }
        
    }
  • 相关阅读:
    Centos7安装IUS源
    算法刷题记录 Day52
    分布式事务
    论文解读(g-U-Nets)《Graph U-Nets》
    哈希冲突概念及其四种解决方案
    【广州华锐互动】3D景区实景导航,让旅行加更加舒适轻松
    Markdown生成word和pdf
    strapi系列-常用操作记录(创建中间件,创建关系型数据库,数据去掉attributes那一层)
    低成本、强交互、沉浸式的云游戏,究竟如何实现?
    MySQL中比较运算符的使用
  • 原文地址:https://blog.csdn.net/m0_72495985/article/details/127770718