zoukankan      html  css  js  c++  java
  • json的学习笔记

    json比较简单,所以先从json开始学起。

    一 json的名称:

      json的全称是javascript object notation,中文名称为js 对象表示法。

      json的定义:json是一种轻量级的数据交换格式,具有良好的可读和快速编写的特性。,可以在不同平台间进行数据交换。json采用兼容性很高的文本格式,同时也具备类似于c语言体系的行为。--json.org

    二 json的实例和结构:

        一个简单的json实例:

    {
    "employees": [
    { "firstName":"Bill" , "lastName":"Gates" },
    { "firstName":"George" , "lastName":"Bush" },
    { "firstName":"Thomas" , "lastName":"Carter" }
    ]
    }
    对该例子的分析如下:

      (1)json和js中的对象很像,都是用一个{}来作为边界,用[]来表示是数组。

      (2)json包含的内容是键值对(key/value)形式,无序的。

      (3)json 具有自我描述的特性。

      (4)json的多个属性由逗号隔开,最后一个不需要再加逗号。

    三 json的语法规则: 

      JSON 语法是 JavaScript 对象表示法语法的子集。

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    四 json的值:

    JSON 值可以是:

    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true 或 false)
    • 数组(在方括号中)
    • 对象(在花括号中)
    • null

    五 json转换成js对象:

    创建包含 JSON 语法的 JavaScript 字符串:

    var txt = '{ "employees" : [' +
    '{ "firstName":"Bill" , "lastName":"Gates" },' +
    '{ "firstName":"George" , "lastName":"Bush" },' +
    '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
    

    由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

    eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

    var obj = eval ("(" + txt + ")");


    六 json在java中的应用:

    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<Student> stu = new ArrayList<Student>();
    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);
    }

    }

    }



  • 相关阅读:
    [对android程序作代码混淆]
    用smali实现Android apk的简单汉化
    防止java反编译的一些常用方法
    http抓包工具推荐WSockExpert/httpwatch/HttpAnalyzer/DebugBar
    JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)
    22、Secondary Tiles
    21、磁贴和磁贴通知(tile)(下)
    19、Context Menu
    代码管理工具
    20、磁贴和磁贴通知(tile)(上)
  • 原文地址:https://www.cnblogs.com/gaochsh/p/4300739.html
Copyright © 2011-2022 走看看