JSON介绍和使用

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 JSON介绍和使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1.JSON

1.1 web 1.0时代

  • 早期网站:登录若失败,需刷新整个页面,才能重新登录。不点击提交按钮,无法验证账户密码是否错误。

1.2 web 2.0时代

  • 页面往往是局部刷新而不刷新整个网页,来实现页面实施更新
  • 场景:注册账号时,仅仅是输入手机号,就提示是否注册过
  • 重要特征是AJAX

1.3 JSON介绍

  • JSON:(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。易于人阅读和编写。同时也易于机器解析和生成。
  • 在当前前后端分离的大环境下,数据交互非常频繁,JSON也异常中要。

1.4 JSON 语法

  • JSON是一个标记符的序列。

  • JSON是一个序列化的对象数组

  • 对象表示为键值对

  • 数据由逗号分割

  • 花括号保存对象

  • 方括号保存数组

1.4.1 JSON的值
  • 可以是对象数组数字字符串或者三个字面量(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
  • JSON键值对是用来保存JS对象的一种方式,和js对象写法类似,键/值对中键在前用双引号包括,使用:冒号分割,之后跟值。
{``"name"``: ``"John Doe"``, ``"age"``: 18, ``"address"``: {``"country"` `: ``"china"``, ``"zip-code"``: ``"10000"``}}
  • 数组是由方括号括起来的一组值构成,如:[3, 1, 4, 1, 5, 9, 2, 6]
  • 一些合法的JSON的实例:
{``"a"``: 1, ``"b"``: [1, 2, 3]}
[1, 2, ``"3"``, {``"a"``: 4}]
3.14
"plain_text"

1.5 JSON 与 JS 对象的关系

  • JSON (括号最外层带引号)是 JS 对象(括号最外层不带引号)的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串
var` `obj = {a: ``'Hello'``, b: ``'World'``}; ``//这是一个对象,注意键名也是可以使用引号包裹的
var` `json = ``'{"a": "Hello", "b": "World"}'``; ``//这是一个 JSON 字符串,本质是一个字符串
1.5.1 JSON 和 JS 对象互转
  • 要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:
var` `obj = JSON.parse(``'{"a": "Hello", "b": "World"}'``); ``//结果是 {a: 'Hello', b: 'World'}
  • 要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:
var` `json = JSON.stringify({a: ``'Hello'``, b: ``'World'``}); ``//结果是 '{"a": "Hello", "b": "World"}'

1.6 常用类型

  • JS语言中一切皆对象

  • JS任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

  • 对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, …} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

  • 数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 [“java”, “javascript”, “vb”, …] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

  • 在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串

  • 表示对象:对象是一个无序的“‘名称/值’对”集合。一个对象以{左括号开始,}右括号结束。每个“名称”后跟一个:冒号;“‘名称/值’ 对”之间使用,逗号分隔。

    {``"firstName"``: ``"Brett"``, ``"lastName"``: ``"McLaughlin"``}    
    
  • 表示数组:和普通的 JS 数组一样,JSON 表示数组的方式也是使用方括号 []。如何用括号将记录组合成一个值

{ "people":[ {"firstName": "Brett", “lastName”:“McLaughlin” }, { "firstName":"Jason",“lastName”:“Hunter”}]“}

  • 在这个示例中,只有一个名为 people的变量,值是包含两个条目的数组,每个条目是一个人的记录,其中包含名和姓

1.8 JSON和XML的比较

  • JSON:前端交互数据;XML:配置环境

  • 可读性:JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式。

  • 扩展性:XML天生有很好的扩展性,JSON当然也有弱于XML。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。

1.9 开发步骤

  • 导入依赖
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.13.3</version>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>2.0.5</version>
</dependency>
  • 编写实体类
import com.alibaba.fastjson.annotation.JSONField;
public class People {
    private int id;
    private String name;
    private String password;
    private String email;
    //@JSONField(format = "yyyy-MM-dd HH:mm:ss") //使用fastjson注解,可以指定日期格式,在用fastjson将java对象转换为json字符串时,不用指定日期格式
    private Date birthday;

    public People() {
    }

    public People(int id, String name, String password, String email, Date birthday) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.email = email;
        this.birthday = birthday;
    }
  • 封装JsonUtil类
public class JsonUtil {
    public static String getStringByJackson(Object object){
        String DateFormat = "yyyy-MM-dd HH:mm:ss";
        String jsonObject = JsonUtil.getStringByJackson(object,DateFormat);
        return jsonObject;
    }
    public static String getStringByJackson(Object object,String DateFormat) {
    	//需要一个jackson对象映射器,将java对象转换为json字符串
        ObjectMapper objectMapper = new ObjectMapper();
        //时间格式化问题
        //如在实体类中用了注解,则不用上诉代码
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
         //设置objectMapper的时间格式
        SimpleDateFormat sdft = new SimpleDateFormat(DateFormat);
        objectMapper.setDateFormat(sdft);
        String jsonObject = null;
        try {
            jsonObject = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }
    //fastjson方式1
    public static String getStringByfastjson1(Object object) {
    	//解决日期值返回时间戳问题,设置不返回时间戳
        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
        String userJson = JSON.toJSONString(object, SerializerFeature.WriteDateUseDateFormat);
        return userJson;
    }
	//fastjson方式2
    public static String getStringByfastjson2(Object object) {
    	//解决日期值返回时间戳问题,设置不返回时间戳
        //JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
        String userJson=JSON.toJSONStringWithDateFormat(object,JSON.DEFFAULT_DATE_FORMAT); 			//, SerializerFeature.WriteDateUseDateFormat
        //如在实体类中用了注解,则不用上诉代码
        /*String userJson = JSON.toJSONString(object);*/
        return userJson;
    }
}
  • 编写控制器
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    People user = new People(1,"张三","123456","1234568789@123.com",new Timestamp(System.currentTimeMillis()));
    String stringByfastjson1 = JsonUtil.getStringByJackson(user);
    resp.getWriter().write(stringByfastjson1);
    String stringByfastjson2 = JsonUtil.getStringByfastjson1(user);
    resp.getWriter().write(stringByfastjson2);
    String stringByfastjson3 = JsonUtil.getStringByfastjson2(user);
    resp.getWriter().write(stringByfastjson3);
}
  • 注册控制器
<servlet>
    <servlet-name>UserController</servlet-name>
    <servlet-class>com.zk.controller.UserController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UserController</servlet-name>
    <url-pattern>/uc</url-pattern>
</servlet-mapping>
  • @ResponseBody //将服务器端返回的对象转换为json对象响应回去,@RequestBody,接收前台的jiso数据,把json数据封装到pojo中,在AJAX异步获取数据时会使用到。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/123947.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!