使用Json

一,什么是JSON?

       JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。同时也易于机器的解析和生产。它基于JavaScript,JSON采用完全独立语言的文本格式,这些特性使得JSON成为理想的数据交换语言

 

二,JSON格式的对象和数组。

     A.JSON对象   

        {属性名1:值1,属性名2:值2,属性名3:值3.....}

        如:{name:"张三",age:20}

        最外面用{},然后各个属性之间用“,”隔开。名称上可以使用双引号也可以使用单引号甚至可以不适用引号。

     B.JSON数组

       使用JSON格式来描述数组则使用“[]”,数组成员之间用“,”分隔

       如:

             ['足球','音乐','电影']

三,在服务端生成JSON格式的数据

      在AJAX应用中,如果要使用JSON格式的数据来代替XML,就必须要在服务器上生成JSON格式的数据,我们当然可以使用拼接字符串的方式来生成JSON的数据,但是这种方式代码量太大,而且容易出错,此时我们可以使用JSON-lib工具包将java中的集合或者对象转换为JSON格式的数据。JSON-lib 用于将Java中的JavaBean,map,collection,java数组和XML转换成JSON数据格式。

    A.数组,Collection集合转换

   

String[] users={"zhangsan","lisi","wangwu"};
JSONArray jsArray=JSONArray.fromObject(users);
System.out.println(jsArray.toString());

List<String> list=new ArrayList<String>();
list.add("aaaa");
list.add("bbbb");
list.add("ccccc");
jsArray=JSONArray.fromObject(list);
System.out.pritln(jsArray.toString());

输出结果:
["zhangsan","lisi","wangwu"]
["aaaa","bbbb","ccccc"]

   B.Map集合转换

 

Map<String,Object> map=new HashMap<String,Object>();
map.put("name","张三");
map.put("favorite",new String[]{"吃饭","睡觉","游戏"});
map.put("getFavorite","function(i){return this.favorite[i]}");

JSONObject jsObject=JSONObject.fromObject(map);
System.out.println(jsObject.toString());

输出:
{"getFavorite":function(i){return this.favorite[i]},
   "name":"张三",
   "favorite":["吃法”,"睡觉","游戏"]
 }

  C.JavaBean转换

 

public class Student{
    private String name;
    private int age;
   /*setter,getter方法 必须要有 且public*/
  
}

转换代码:
Student stu=new Student("张三",20);
JSONObject jsObject=JSONObject.fromObject(stu);
System.out.println(jsObject.toString());

输出:
{"age":20 , "name":"张三"}

 D.复合类型(比较常用)

 

public class Teacher{
    private String name;
    private Set<Student> students=new HashSet<Student>();
   //省掉构造方法和setter/getter
}
Teacher teacher=new Teacher("吴老师");
teacher.getStudents().add(new Student("张三",20));
teacher.getStudents().add(new Student("李四",20));
teacher.getStudents().add(new Student("王五",20));

JSONObject jsObject=JSONObject.fromObject(teacher);
System.out.println(jsObject.toString());

输出:
 {"name":"吴老师","students":[{"age":20,"name":"张三"},
                              {"age":20,"name":"李四"},
                              {"age":20,"name":"王五"},
                             ]
  }

 

特别注意:

  一个对象的某个属性为 Date 类型时候,转换后的格式为:{"date":10,"day":3,"hours":14,"minutes":14,"month":2,"seconds":1,"time":1268201641228,"timezoneOffset":-480,"year":110},"name":"NewBaby"}

这时你会发现它把bean对象里的util.Date这个类型的所有属性一一转换出来。在实际运用过程中,大多数情况下我们希望能转化为yyyy-MM-dd这种格式,下面就讲一讲如何实现:
   首先要写一个新的类JsonDateValueProcessor如下:

 

 

public class JsonDateValueProcessor implements JsonValueProcessor {  
    private String datePattern = "yyyy-MM-dd";
    public JsonDateValueProcessor() {
        super();
    }  
    public JsonDateValueProcessor(String format) {
        super();
        this.datePattern = format;
    }   
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
        return process(value);
    }

    public Object processObjectValue(String key, Object value,
            JsonConfig jsonConfig) {
        return process(value);
    }

    
    private Object process(Object value) {
        try {
            if (value instanceof Date) {
                SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
                        Locale.UK);
                return sdf.format((Date) value);
            }
            return value == null ? "" : value.toString();
        } catch (Exception e) {
            return "";
        }

    }
    public String getDatePattern() {
        return datePattern;
    }
    public void setDatePattern(String pDatePattern) {
        datePattern = pDatePattern;
    }
}

 测试代码:

 

JsonBean bean = new JsonBean();
bean.setName("NewBaby");
bean.setAge(1);
bean.setBorn(new Date());

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());

JSONObject jo = JSONObject.fromObject(bean, jsonConfig);
System.out.println("bean->json:" + jo.toString());

打印结果:bean->json:{"age":1,"born":"2010-03-10","name":"NewBaby"}
这就能得到我们想要的结果了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值