Java与Json:Json语言语法格式以及解析

一、简介

  JSON:JavaScript Object Notation,JS对象简谱,是一种轻量级的数据交换格式

  • json现在多用于存储和交换文本信息的语法
  • 进行数据的传输
  • JSON 比 XML 更小、更快,更易解析。

二、JSON格式

  • 对象格式
      一个对象, 由一个大括号表示.
      括号中 描述对象的属性 . 通过键值对来描述对象的属性
      (可以理解为, 大括号中, 包含的是一个个的键值对.)
  • 数组格式
      在JSON格式中可以与对象互相嵌套
      [元素1,元素2…]

三、JSON语法

  • 数据在名称/值对中:json数据是由键值对构成的
    * 键用引号(单双都行)引起来,也可以不使用引号
    * 值得取值类型:
      1. 数字(整数或浮点数)
      2. 字符串(在双引号中)
      3. 逻辑值(true 或 false)
      4. 数组(在方括号中) {“persons”:[{},{}]}
      5. 对象(在花括号中) {“address”:{“province”:“陕西”…}}
      6. null
    * 数据由逗号分隔:多个键值对由逗号分隔
    * 花括号保存对象:使用{}定义json 格式
    * 方括号保存数组:[]
  • 获取数据:
      1. json对象.键名
      2. json对象[“键名”]
      3. 数组对象[索引]
      4. 遍历
  • JSON数据和Java对象的相互转换
    * JSON解析器
       常见的解析器:Jsonlib,Gson,fastjson,jackson

四、解析方式

1. Gson
 Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。
   使用:
      String json = new Gson().toJSON(要转换的对象);
      Book book = new Gson().fromJson(json, Book.class);

 public static void main(String[] args) {
        //导包
        //1.创建GSON对象
        Gson gson = new Gson();
        //2. 拿到java对象
        Student student = new Student("张三", 18, "热爱学习!");
        //3. 调用Gson的toJson方法
        String s = gson.toJson(student);
        System.out.println(s);
    }
 public static void main(String[] args) {
        //1. 定义json字符串 {"name":"李白","age":21,"info":"伟大的诗人"}
        String json = "{\"name\":\"李白\",\"age\":21,\"info\":\"伟大的诗人\"}";
        //2. 创建Gson对象
        Gson gson = new Gson();
        //3. 调用fromJson方法
        Student student = gson.fromJson(json, Student.class);

        System.out.println(student);
    }

2. FastJson
   FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
   使用:
      String json=JSON.toJSONString(要转换的对象);
      Book book = JSON.parseObject(json, Book.class);

 public static void main(String[] args) {
        //1. 对象
        Student student = new Student("赵四", 33, "高效全能选手!");
        //2. 调用JSON的静态方法 toJSONXxx()
        String s = JSON.toJSONString(student);

        System.out.println(s);
    }
    public static void main(String[] args) {
        //{"age":33,"info":"高效全能选手!","name":"赵四"}
        //1. 定义json字符串
        String str = "{\"age\":33,\"info\":\"高效全能选手!\",\"name\":\"赵四\"}";
        //2. 调用JSON的parseObject
        Student student = JSON.parseObject(str, Student.class);

        System.out.println(student);
        //json转其他类型
        List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]", String.class);
        System.out.println(strings.get(1));

    }

3. Jackson
  Jackson是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架
使用:
  writeValueAsString(obj):将对象转为json字符串
  writeValue(参数1,obj)

参数
	File:将obj对象转换为JSON字符串,并保存到指定的文件中
	Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
	OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流

  readValue(str,类名.class):字符串转对象
  注解
    1. @JsonIgnore:排除属性。
    2. @JsonFormat:属性值得格式化
      @JsonFormat(pattern = “yyyy-MM-dd”)
  步骤
      1. 导入jackson的相关jar包(注意三个包)
          jackson-core-2.2.3.jar:jackson的核心包
          jackson-databind-2.2.3.jar:数据映射的包,即ObjectMapper就在这个包
          jackson-annotations-2.2.3.jar:jsckson的注解包
      2. 创建Jackson核心对象 ObjectMapper
      3. 调用ObjectMapper的相关方法进行转换

public static void main(String[] args) throws JsonProcessingException {
        //1. 导入jackson的相关jar包
        //2. 创建Jackson核心对象 ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //对象
        Student student = new Student("老樊", 24, "优秀唱作人");
        //3. 调用ObjectMapper的相关方法进行转换--writeValueAsString
        String s = mapper.writeValueAsString(student);

        System.out.println(s);
    }
    public static void main(String[] args) throws IOException {
        //1.创建ObjectMapper对象
        ObjectMapper mapper = new ObjectMapper();
        //2. json字符串
        String str = "{\"name\":\"老樊\",\"age\":24,\"info\":\"优秀唱作人\"}";
        //3. 调用ObjectMapper的相关方法进行转换-- readValue
        Student student = mapper.readValue(str, Student.class);

        System.out.println(student);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Itfuture03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值