JSON

1. json基本语法

目标

  • 了解json的作用
  • 掌握json的基本语法

分析

  1. 了解json的作用
  2. 定义和解析json数据

讲解

复习xml的作用:

  • 作为配置文件
  • 存储数据
  • 作为数据传输的格式
json介绍
  • 介绍:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
  • 作用:
    • 也可以存储数据,但是没有数据库强大、没有数据库方便。所以存数据还用数据库
    • 也可以作为软件的配置文件,我们开发的程序里很少使用json作为配置文件
    • 作为数据传输的格式:使用非常普遍
json的定义与解析
语法
  • 定义json:

    • 对象形式:{"key":value, "key":value, ....}
    • 数组形式:[v1, v2, v3,...]
    • 混合形式:以上两种形式可以任意混合
  • 解析json:
    • 从对象里取某key的值:json对象.key
    • 从数组里取某索引的值:json数组[索引]
练习
  • 对象形式
let obj = {"name":"三丰", "age":100};
let v = obj.name;alert(v);
  • 数组混合
let girls = [{"name":"柳喲", "age":18, "addr":"北京"},{"name":"热巴", "age":19, "addr":"新疆"},{"name":"圆圆", "age":30, "addr":"天津"}
];let v = girls[2].name;alert(v);

题目

1. 根据以下代码,判断哪个json解析正确:AC
let wulin = {"first":"黑马","wudang":[{"first" : "张" , "last" : "三丰"},{"first" : "张" , "last" : "翠山"}],"emei":[{"first" : "周" , "last" : "芷若"},{"first" : "丁" , "last" : "敏君"}]
}

A: 解析获取黑马:wulin.first

B: 解析获取芷若:wulin.emei.last 错误。正确的应该是:wulin.emei[0].last

C: 解析获取三丰:wulin.wudang[0].last

D: 解析获取三丰:wulin.wudang[1].last

2. 判断以下json格式正确的是:ABD

A: {"first":"黑马", "last":"白马"}

B: {"first":"黑马", "last":[ {"first":"白", "last":"马"}] }

C: {{"first":"黑", "last":"马"}, {"first":"白", "last":"马"}}

D: [{"first":"张", "last":"三丰"}, {"first":"张", "last":"翠山"}]

2. json转换工具

目标

  • 掌握jackson的使用

分析

客户端和服务端之间使用Ajax交互时,服务端使用JavaBean存储数据,客户端使用json存储数据。这就需要我们掌握JavaBean对象和json格式之间的转换:

  • 服务端把JavaBean对象里的数据,转换成json格式的字符串,返回给客户端
  • 客户端把json格式的字符串提交到服务端,服务端接收到之后,要能够转换成JavaBean对象

常用的转换工具有:

  • jsonlib:jdk社区提供的工具,用的很少
  • gson:google提供的工具,使用比较普遍
  • jackson:SpringMVC框架内置的转换工具,使用非常普遍
  • fastjson:Alibaba提供的转换工具,国内使用相对较多

我们要求掌握:jackson

讲解

导入jackson的jar包

把以下三个包,导入到web项目里:web\WEB-INF\lib,之后 Add as Library

Jackson的常用API

Jackson工具包提供了一个核心类:ObjectMapper,这个对象提供了JavaBean和json之间转换的常用方法:

方法 说明
ObjectMapper() 无参构造方法
writeValueAsString(Object obj) 把JavaBean对象转换成json格式的字符串
readValue(String json, Class clazz) 把json格式字符串,还原成指定类型的JavaBean对象
readValue(InputStream is, Class clazz) 从输入流中读取json数据,还原成指定类型的JavaBean
Jackson的使用示例
准备一个JavaBean
package com.jackson;public class User {private String name;private String sex;private Integer age;public User() {}public User(String name, String sex, Integer age) {this.name = name;this.sex = sex;this.age = age;}//get/set 和 toString方法 省略....
}
转换示例
package com.jackson;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class DemoJackson {/*** Java转换成json*/@Testpublic void test1() throws JsonProcessingException {User user1 = new User("tom", "男", 20);User user2 = new User("jerry", "女", 19);List<User> userList = new ArrayList<>();userList.add(user1);userList.add(user2);Map<String, User> userMap = new HashMap<>();userMap.put("u1", user1);userMap.put("u2", user2);//1. 把一个User对象的数据,转换成json格式的字符串//   {"name":"tom","sex":"男","age":20}ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(user1);System.out.println(json);//2. 把一个List<User>数据,转换成json格式的字符串//   [{"name":"tom","sex":"男","age":20},{"name":"jerry","sex":"女","age":19}]json = mapper.writeValueAsString(userList);System.out.println(json);//3. 把一个Map<String,User>数据,转换成json格式的字符串//   {"u1":{"name":"tom","sex":"男","age":20},"u2":{"name":"jerry","sex":"女","age":19}}json = mapper.writeValueAsString(userMap);System.out.println(json);}/*** 把json字符串还原成Java对象*/@Testpublic void test2() throws IOException {String json = "{\"name\":\"tom\",\"sex\":\"男\",\"age\":20}";//json对象形式 还原成JavaBeanObjectMapper mapper = new ObjectMapper();User user = mapper.readValue(json, User.class);System.out.println(user);//json对象形式 还原成MapMap map = mapper.readValue(json, Map.class);System.out.println(map.get("name"));//复杂json数组格式,还原成List(默认不带泛型是List,不能还原成List<User>)json = "[{\"name\":\"tom\",\"sex\":\"男\",\"age\":20},{\"name\":\"jerry\",\"sex\":\"女\",\"age\":19}]";List list = mapper.readValue(json, List.class);System.out.println(list.get(0));}}

总结

  • json是什么:是一种数据格式

    • 可以作为配置文件
    • 可以存储数据
    • 可以作为数据传输的格式
  • json语法
    • 定义json:

      • 对象形式:{"key":value, "key":value, }
      • 数组形式:[v1, v2, v3...]
      • 混合形式:以上两种形式可以任意混合
    • 解析json:
      • 获取对象里的key值:json对象.key
      • 获取数组里索引i的值:json数组[i]
  • json转换:Jackson
ObjectMapper mapper = new ObjectMapper();//1. 把Java对象转换成json
String json = mapper.writeValueAsString(Object obj);//2. 把json还原成Java对象
mapper.readValue(String json, Class clazz);

Java——Json语法介绍与使用(详细介绍)相关推荐

  1. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  2. JAVA中JVM的重排序详细介绍(写得很明白)

    刚刚在研究volatile变量的时候,涉及到重排序的概念,于是发现了这篇很好的文章,写得很简短很明白.所以转载一下. 原文地址:JAVA中JVM的重排序详细介绍 原文贴出来: 重排序通常是编译器或运行 ...

  3. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括: 第1部分 HashSet介绍 第2部分 Has ...

  4. 豆瓣网络爬虫-java网络爬虫[验证码模拟登陆]详细介绍

    目录 抓包介绍 解决验证码的思路 验证码地址拼接 爬虫实战 爬虫架构 model main 解析htmlparse 数据库操作程序db 近期,有人将本人博客,复制下来,直接上传到百度文库等平台. 本文 ...

  5. 牛散村:Java字节码编程javassist的详细介绍

    本篇文章将和大家分享一下关于Java字节码编程中一个非常之好用的技术javassist,下面将详细为大家介绍一下javassist技术,以及具体实例代码讲解. 一.Javassist入门 (一)Jav ...

  6. java 剪切图片点坐标_详细介绍java根据坐标截取图片的实例代码

    这篇文章主要介绍了java 根据坐标截取图片实例代码的相关资料,需要的朋友可以参考下 java 根据坐标截取图片 实例代码:代码中有不是注释,很好看懂!package com.json.test; i ...

  7. java 如何调用static_java 关键字static详细介绍及如何使用

    java 关键字static 详解 一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中stati ...

  8. java URL java.net.URL类的使用 详细介绍 URL转义 解决URL中文字符

    类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,也就是我们常说的域名.浏览器访问地址. 在Java中就 ...

  9. 腾讯微博android sdk,腾讯微博java(android)sdk新增微博api详细介绍

    本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...

  10. Java IO流 - 字节流的使用详细介绍

    文章目录 IO流的基本介绍 字节流的使用 文件字节输入流 创建字节输入流 每次读取一个字节 每次读取一个数组 一次读取全部字节 文件字节输出流 创建字节输出流 写入文件输出流 文件拷贝练习 IO流的基 ...

最新文章

  1. 如何理解Transformer论文中的positional encoding,和三角函数有什么关系?
  2. IDEA常用快捷键!!
  3. mysql distinct 慢_MySQL 5.5“select distinct”真的很慢
  4. html action不起作用,Html.ActionLink做为按钮或图像,而不是连接
  5. 前端学习 -- 内联框架iframe
  6. Android 编程下设置 Activity 切换动画
  7. python多线程编程(6): 队列同步
  8. 前端自动化测试概览【超全面介绍】包你学废
  9. 洛谷 P1852 [国家集训队] 跳跳棋
  10. 解决bootstrap模态框居中问题
  11. 【毕业设计】超声波红外自动调速风扇系统 - 单片机 嵌入式
  12. 树莓派控制超声波测距原理
  13. implicit super constructor animal() is undefined for default constructor. Must define an explicit 异常
  14. 杀戮尖塔(Slay the Spire) mod制作 --- 1
  15. 非对称加密实战(一):JDK生成keystore获取公钥私钥及代码验证【附源码】
  16. 大数据与云计算网课答案
  17. java求一批数据的最大值、最小值、以及掐头去尾之后的平均值。
  18. 手把手教你拥有自己的代码生成器-------->坑居多
  19. BookKeeper存储设计浅析
  20. C语言itoa()函数

热门文章

  1. 如何通过计算机侵入学校网络,如何进行局域网入侵
  2. “夏栀的博客”网站一期建站通知贴
  3. 两台没有网络的计算机如何共享文件,两台电脑共享文件,教您两台电脑如何共享文件...
  4. HTC VIVE☀️四、Linear Drive与Circular Drive的使用
  5. 简单谈谈自己对前端的感想
  6. “学霸系统”课堂展示
  7. 激荡十年:云计算的过去、现在和未来
  8. 数据分析案例——销售利润不达标原因分析及应对策略
  9. Java类集框架——List接口
  10. 2021年AR/VR创企融资39亿美元创纪录 元宇宙成为推手