json in java

来源:互联网 发布:爱知 编辑:程序博客网 时间:2024/06/11 12:13

一. 概述

  • JSON: JavaScript Object Notation,即JavaScript 对象表示法;
  • JSON 是轻量级的文本数据交换格式,类似 XML, 比 XML 更小、更快,更易解析。
  • JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言。
    官网:http://json.org/json-zh.html

二. 格式

{    "name": "张三",    "age": 20,    "skills": [        "java",        "python",        "javascript"    ],    "friends": [        {            "name": "小红",            "age": 20        },        {            "name": "小绿",            "age": 21        }    ],    "has_girlfriend": false,    "job": null}

JSON 语法是 JavaScript 对象表示法语法的子集。
JSON 值可以是:
- 数字(整数或浮点数),统一为数据类型number
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null

三. JSONObject对象

1. 使用org.json中的JSONObject对象构建json数据

1)首先,在maven的pom.xml中添加org.json包的依赖:

<dependency>      <groupId>org.json</groupId>      <artifactId>json</artifactId>      <version>20090211</version></dependency>

2)构建json数据

public static void JSONObjectDemo() throws JSONException  {        Object mynull = null;        JSONObject zhangsan = new JSONObject();        zhangsan.put("name", "张三");        zhangsan.put("age",20);        zhangsan.put("skills",new String[]{"java","python","javascript"});        JSONObject xiaohong = new JSONObject();        xiaohong.put("name", "小红");        xiaohong.put("age", 20);        JSONObject xiaolv = new JSONObject();        xiaolv.put("name", "小绿");        xiaolv.put("age", 21);        zhangsan.put("friends", new Object[]{xiaohong,xiaolv});         zhangsan.put("has_girlfriend",false);        zhangsan.put("job",mynull);        System.out.println(zhangsan.toString());        }

2. 使用HashMap构建json数据

方法类似上面:

public static void CreateJsonByMap() {        Map<String,Object> zhangsan = new HashMap<String,Object>();        Object mynull = null;        zhangsan.put("name", "张三");        ....        System.out.println(new JSONObject(zhangsan).toString());        }

3. 使用java bean构建json数据

首先要有一个javabean的类,比如已经创建好了Person类

public static void CreateJsonByBean() {        Person zhangsan = new Person();        zhangsan.setName("张三");        ....        System.out.println(new JSONObject(zhangsan).toString());        }

4. 从文件读取json数据

public static void ParserFromFile() throws IOException, JSONException {        BufferedReader br = new BufferedReader(new FileReader("F://zhangsan.json"));        StringBuffer sb = new StringBuffer();        String temp = null;        while((temp = br.readLine())!=null){            sb.append(temp);        }        JSONObject jo = new JSONObject(sb.toString());        if(!jo.isNull("name")){    //增强健壮性            System.out.println("姓名:"+jo.getString("name"));        }        //获取数组        JSONArray major = jo.getJSONArray("skills");        for (int i = 0;i<major.length();i++) {            System.out.println("major"+(i+1)+"-"+major.get(i));        }    }

四. GSON基本使用

1. 解析与反解析

1)将Javabean的对象转为json字符串:

public static void BeanToJSON(){        User lisi = new User();        lisi.setName("李四");        lisi.setAge(20);        lisi.setSkills(new String[]{"唱歌","跳舞"});        lisi.setHas_girlfriend(true);        Gson gs = new Gson();        System.out.println(gs.toJson(lisi));    }

2)将json字符串转为Javabean的对象:

public static void JSONToBean() throws IOException{        BufferedReader br = new BufferedReader(new FileReader("F://zhangsan.json"));        StringBuffer sb = new StringBuffer();        String temp = null;        while((temp = br.readLine())!=null){            sb.append(temp);        }        Gson gs = new Gson();        User zhangsan = gs.fromJson(sb.toString(), User.class);    }

2. 个性化设置json格式:

1)格式化显示:

        GsonBuilder gb = new GsonBuilder();        gb.setPrettyPrinting();        Gson gs = gb.create();        System.out.println(gs.toJson(lisi));

2)利用Gson生成新的策略,通过代入回调函数添加额外功能,生成个性化的json

        GsonBuilder gb = new GsonBuilder();        gb.setFieldNamingStrategy(new FieldNamingStrategy() {            public String translateName(Field f) {                if(f.getName().equals("name"))                    return "NAME";                else                    return f.getName();            }        });        Gson gs = gb.create();        System.out.println(gs.toJson(lisi));

3)字符串转日期类型
json中没有Date类型,所以一般用String类型表示日期,GSON提供了转换功能

        GsonBuilder gb = new GsonBuilder();        gb.setDateFormat("yyyy-MM-dd");  //设置日期模板,json中的此格式内容会自动转为Date类型        Gson gs = gb.create();        User zhangsan = gs.fromJson(sb.toString(), User.class);        System.out.println(zhangsan.getBirthday().toLocaleString());
原创粉丝点击