json in java

一. 概述

  • 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());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值