【JSON快速入门】使得XML被人们淘汰的技术,你还不知道?

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 首先大家要知道JSON是一种轻量级的数据交换格式,类似与之前的XML,那么我们学习过了XML了为什么还要学习JSON呢?是因为JSON太过于火热使得XML被人淘汰了哈哈哈。

前言


首先大家要知道JSON是一种轻量级的数据交换格式,类似与之前的XML,那么我们学习过了XML了为什么还要学习JSON呢?是因为JSON太过于火热使得XML被人淘汰了哈哈哈。


往期好文推荐: 【EL与JSTL表达式】学习JSP之后,这是你不得不知道的技术


直接使得XML被淘汰了,那么这个JSON的重要性不言而喻了,我们正式开始学习!


初识JSON

JSON:全称为JavaScript Object Notation(JavaScript 对象表示法),是轻量级的文本数据交换格式。


JSON 是存储和交换文本信息的语法,类似 XML。


JSON 比 XML 更小、更快,更易解析。这也是JSON能取代XML的原因之一。


JSON语法规则

JSON是一种格式,那么它的核心就是它自己的语法规则了。


JSON语法格式:


(1)数据由键(key)/值(value)描述,由逗号分隔。

(2)大括号代表一个完整对象,可拥有多个键值对。

(3)中括号保存数组,多个对象之间使用逗号分隔。


如下就是一个使用JSON语法构成的数据:

{
  "sites":[
  {"name" : "CSDN", "url" : "www.csdn.com"},
  {"name" : "百度", "url" : "www.baidu.com"}
  ]
}


创建JSON文件

微信图片_20220522105312.png微信图片_20220522105321.png

我们创建一个JSON也是非常简单的,直接右击项目的源码目录,选择创建File(文件)即可,最后把后缀名改为.json即可。




之后进行编写即可如下:

[{"empno": 7369,"ename": "小明","job": "软件工程师","hiredate": "2017-04-12","salary": 13000,"dname": "研发部"},
{"empno": 7499,"ename": "王乐","job": "算法工程师","hiredate": "2017-05-12","salary": 19000,"dname": "研发部","customers": [{"cname": "秋冬"},{"cname": "傻狗"}]}]


写完之后可能有点长,我们给他进行格式化:


右击当前页面找到Source,然后在Source中找到Format点击即可。


就会发现页面格式变为:

image.png


除此之外我们还可以按快捷键来进行格式化:Ctrl + Shift + F


JSON与Java Script交互

之前就说过了JSON的全称为JavaScript Object Notation(JavaScript 对象表示法),这里有JavaScript,其实最早开始JSON就是专门为JavaScript来提供服务的,但是后来太好用了所以就慢慢对所有语言都可用了。


这里得说一下JSON是独立于语言的。


JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。


Java Script访问JSON

那么我们该如何使用JavaScript来访问JSON呢?


因为JSON是使用Javascript语法来描述数据对象的,所以JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。


所以JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。


接下来我们直接在HTML页面里,写一个JavaScript 代码块,在JavaScript 代码块里面来创建JSON数据对象,并对其进行输出。

Insert title here
  var json = [
  {
    "empno": 7369,
    "ename": "小明",
    "job": "软件工程师",
    "hiredate": "2017-04-12",
    "salary": 13000,
    "dname": "研发部"
  },
  {
    "empno": 7499,
    "ename": "王乐",
    "job": "算法工程师",
    "hiredate": "2017-05-12",
    "salary": 19000,
    "dname": "研发部",
    "customers": [
    {
      "cname": "秋冬"
    },
    {
      "cname": "大力"
    }
    ]
  }
  ];
  //在瀏覽器控制臺對json内容進行輸出
  console.log(json);
  //在瀏覽器頁面進行輸出
  for(var i = 0; i < json.length; i ++) {
  var emp = json[i];
  document.write("
")
  document.write(emp.empno);
  document.write("," + emp.ename);
  document.write("," + emp.job);
  document.write("," + emp.salary);
  document.write("," + emp.dname);
  document.write("")
//因为customers属性不是公有的,所以要先判断在进行输出
  if(emp.customers != null) {
    document.write("
--")
    for(var j = 0; j < emp.customers.length; j++) {
    document.write(emp.customers[j].cname + ",");
    }
    document.write("")
  }
  }


我们在代码中分别先创建了JSON数据对象,然后对其内容分别在浏览器控制台与页面进行输出。接下来我们看一看输出效果。

微信图片_20220522110335.png微信图片_20220522110341.png微信图片_20220522110345.png





JS中将字符串转换为JSON

在实际应用场景中我们会经常需要进行把字符串转化为JSON格式的数据或者是把JSON转化为字符串进行保存。


我们先来看将字符串转化为JSON。


使用JSON.parse()方法将字符串转换为JSON对象


其实就是这么简单的,我们继续写一个案例进行演示。


字符串转JSON

//原始字符串不能写错,需要与标准JSON格式相同才能进行转换
  var str = "{\"class_name\":\"五年级二班\"}";
  var json = JSON.parse(str);
  console.log(json);
  console.log(str);
  document.write(json.class_name);



在浏览器页面中的输出:

微信图片_20220522110421.png


但是这里要注意,不是所有的字符串都能转化为JOSN对象的,这里的字符串要求是格式是JSON格式的字符串,要符合JSON语法的。


JS中将JSON对象转化为字符串

使用JSON.stringify()方法将JSON对象转换为字符串


其实就是这么简单的,我们继续写一个案例进行演示。


JSON转字符串

var json = {"class_name" : "三年级五班"};
  var str = JSON.stringify(json);
  console.info(json);
  console.info(str)

;



在浏览器进行输出

微信图片_20220522110436.png

在JS中创建JSON对象


其实我们在js中创建JSON对象还可以这样:


JSON转字符串

//创建json的新方式,当作对象一样!
  var json1 = {}
  json1.class_name = "六年级八班";
  json1.teacher = "大力";
  console.info(json1);



输出:


微信图片_20220522110507.png

JSON与Java交互

之前提到了JSON是脱离与语言的,我们Java也能与JSON进行交互。接下来就来看看它们是怎么要进行交互的。


环境准备

Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。

下面是几个常用的 JSON 解析类库:


(1)Gson: 谷歌开发的 JSON 库,功能十分全面

(2)FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。

(3) Jackson:社区十分活跃且更新速度很快。


我们这里选用国产的JSON解析库FastJson。


我们首先安装FastJson解析库,在网上下载FastJson的jar包之后我们只需要把他复制到Web应用的WEB-INF目录底下的lib目录中去,就可以使用了。

微信图片_20220522110529.png


FastJSON对象序列化与反序列化

序列化与反序列化其实就是,Java对象与JSON对象之间的转换.


(1)使用JSON.toJSONString(Java对象)将Java对象转化为JSON字符串。

(2)使用 JSON.parseObject(JSON对象,要转化为的Java类)将JSON对象转化为Java对象。


代码演示:


我们先创建一个Java类用来创建原始数据。

public class Employee {
  private Integer empno;
  private String ename;
  private String job;
  private Date hdate;
  private Float salary;
  private String dname;
  public Employee() {
  }
  public Employee(Integer empno, String ename, String job, Float salary, String dname) {
  super();
  this.empno = empno;
  this.ename = ename;
  this.job = job;
  this.salary = salary;
  this.dname = dname;
  }
  public Integer getEmpno() {
  return empno;
  }
  public void setEmpno(Integer empno) {
  this.empno = empno;
  }
  public String getEname() {
  return ename;
  }
  public void setEname(String ename) {
  this.ename = ename;
  }
  public String getJob() {
  return job;
  }
  public void setJob(String job) {
  this.job = job;
  }
  public Date getHdate() {
  return hdate;
  }
  public void setHdate(Date hdate) {
  this.hdate = hdate;
  }
  public Float getSalary() {
  return salary;
  }
  public void setSalary(Float salary) {
  this.salary = salary;
  }
  public String getDname() {
  return dname;
  }
  public void setDname(String dname) {
  this.dname = dname;
  }
}
然后创建Java类对象进行转化:
public class FastJsonSample1 {
  public static void main(String[] arge) {
  Employee employee;
  employee = new Employee(1101, "大力", "经理", 10000f, "市场部");
  Calendar c = Calendar.getInstance();
  c.set(2019,0,30,0,0,0);
  employee.setHdate(c.getTime());
  //FastJSON中提供了JSON对象,完成对象与JSON字符串的相互转换
  String json = JSON.toJSONString(employee);
  System.out.println(json);
  //JSON对象转换为Java类对象
  Employee emp = JSON.parseObject(json,Employee.class);
  System.out.println(emp.getEname());
  }
}



输出:

image.png

我们可以看到转化输出都非常成功但是这个日期与我们设置的并不相同。


其实这里的日期默认为时间戳-从1970到设置日期的毫秒数,我们可以使用注解来解决这个问题。


我们在创建类的日期属性上面增加注解设置格式:

image.png

@JSONField(format = "yyyy-MM-dd HH:mm:ss")



再来看输出:

image.png

正常输出了。


FastJSON对象数组序列化与反序列化

刚才是单个 FastJSON对象序列化与反序列化,但是在平时的真实应用场景中,往往是很多的JSON对象与Java对象之间进行转换,或者是很多的Java对象与JSON对象进行转化的。


那么我们又该如何让进行转化呢?


(1)依然使用JSON.toJSONString(Java对象)将Java对象转化为JSON字符串。

(2)使用 JSON.parseArray(JSON对象,要转化为的Java类)将JSON对象转化为Java对象。


代码演示:

public class FastJsonSample2 {
  public static void main(String[] arge) {
  List emplist = new ArrayList();
  //使用循环创建对象组
  for(int i = 0; i < 50; i ++) {
    Employee employee = new Employee();
    employee.setEmpno(1012 + i);
    employee.setEname("员工" + i);
    emplist.add(employee);
  }
  //可以把数组,集合,List转换为JSON数组
  String json = JSON.toJSONString(emplist);
  System.out.println(json);
  //反序列化,将JSON转换为Java对象
  List emps = JSON.parseArray(json, Employee.class);
  for(Employee e : emps) {
    System.out.println(e.getEname() + ":" + e.getEmpno());
  }
  }
}


输出:

image.png


结语

JSON代替了XML,成为了当下使用最广泛的一门技术之一。我们应该对其在学习阶段好好练习掌握,以便在工作中熟练运用。


相关文章
|
28天前
|
XML JavaScript 数据格式
XML 相关技术
XML 相关技术
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
48 1
|
4月前
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
63 1
|
4月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
199 1
|
3月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
188 61
C# 中的 XML 与 JSON 数据处理
|
6月前
|
XML Java 数据格式
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
43 1
|
2月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
193 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
452 0
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
96 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
139 0