当前位置: 首页 > news >正文

JSON 使用讲解

在开发有关接口的时候,我们就需要设计接口返回的数据格式,常用的数据格式有xml、json等。那么今天我们就来看看json的使用。

一.JSON 描述。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

二.语法规则。

1. JSON是由‘名称/值’对组成的集合,’名称/值‘格式例如,“key1”:value1。

2.JSON的值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。

3.JSON有两种结构,一种是对象,另一种是数组。

(1).对象(object),是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号) 分 隔。 是由{}括起来的,格式例如,{"key1":value1,"key2":value2,"key3":value3,...}。

(2).数组(array) ,是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔,是由[]括起来的。格式例如,[{"key1":value1,"key2":value2,"key3":value3},{"key1":value1,"key2":value2,"key3":value3}...]。

三.JSON解析。

1. 新建测试项目。

实体类,

public class Person { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }

使用GSON和JackJson分别解析。

2. GSON。GSON是Google开发的Java API,用于转换Java对象和Json对象。

2.1. 首先下载导入GSON的jar。

(1).gson-2.6.6.jar 下载链接。

2.2.生成对象。

public static void main(String[] args) { Gson gson=new Gson(); Person person=new Person(); person.setId(1); person.setName("zhangsan"); person.setAge(30); String str=gson.toJson(person); System.out.println(str); }

2.3.输出结果。

{"id":1,"name":"zhangsan","age":30}

2.4.生成数组。

public static void main(String[] args) { List<Person> list=new ArrayList<Person>(); Gson gson=new Gson(); Person person=new Person(); person.setId(1); person.setName("zhangsan"); person.setAge(30); list.add(person); Person person1=new Person(); person1.setId(2); person1.setName("lisi"); person1.setAge(20); list.add(person1); String str=gson.toJson(list); System.out.println(str); }

2.5.输出结果。

[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20}]

2.6.json解析对象。

public static void main(String[] args) { String str="{\"id\":1,\"name\":\"zhangsan\",\"age\":30}"; Gson gson=new Gson(); Person person=gson.fromJson(str, Person.class); System.out.println(person.toString()); }

2.7.输出结果。

Person [id=1, name=zhangsan, age=30]

2.8.json解析数组。

public static void main(String[] args) { String str = "[{\"id\":1,\"name\":\"zhangsan\",\"age\":30},{\"id\":2,\"name\":\"lisi\",\"age\":20}]"; Gson gson = new Gson(); Type type = new TypeToken<List<Person>>() { }.getType(); List<Person> list = gson.fromJson(str, type); for (Person person : list) { System.out.println(person.toString()); } }

2.9.输出结果。

Person [id=1, name=zhangsan, age=30] Person [id=2, name=lisi, age=20]

3.JackJson。

Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。
Jackson框架包含了3个核心库:streaming,databind,annotations。

3.1 库下载地址。

Jackson Pages · FasterXML/jackson-core Wiki · GitHub

Databind GitHub - FasterXML/jackson-databind: General>Person person=new Person(); person.setId(1); person.setName("zhangsan"); person.setAge(30); ObjectMapper objectMapper = new ObjectMapper(); try { String json=objectMapper.writeValueAsString(person); System.out.println(json); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); }

3.3. 结果。

{"id":1,"name":"zhangsan","age":30}

3.4. 生成数组。

List<Person> list=new ArrayList<Person>(); Person person=new Person(); person.setId(1); person.setName("zhangsan"); person.setAge(30); list.add(person); Person person1=new Person(); person1.setId(2); person1.setName("lisi"); person1.setAge(20); list.add(person1); Person person2=new Person(); person2.setId(3); person2.setName("wangwu"); person2.setAge(30); list.add(person1); ObjectMapper objectMapper = new ObjectMapper(); try { String json=objectMapper.writeValueAsString(list); System.out.println(json); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); }

3.5.结果。

[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}]

3.6.json解析对象。

Person person=new Person(); person.setId(1); person.setName("zhangsan"); person.setAge(30); ObjectMapper objectMapper = new ObjectMapper(); try { String json=objectMapper.writeValueAsString(person); System.out.println(json); Person info=objectMapper.readValue(json, Person.class); System.out.println(info.toString()); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

3.7结果。

{"id":1,"name":"zhangsan","age":30} Person [id=1, name=zhangsan, age=30]

3.8.json解析数组。

List<Person> list=new ArrayList<Person>(); Person person=new Person(); person.setId(1); person.setName("zhangsan"); person.setAge(30); list.add(person); Person person1=new Person(); person1.setId(2); person1.setName("lisi"); person1.setAge(20); list.add(person1); Person person2=new Person(); person2.setId(3); person2.setName("wangwu"); person2.setAge(30); list.add(person1); ObjectMapper objectMapper = new ObjectMapper(); try { String json=objectMapper.writeValueAsString(list); System.out.println(json); Person[] persons=objectMapper.readValue(json, Person[].class); for (Person info:persons) { System.out.println(info.toString()); } } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

3.9结果。

[{"id":1,"name":"zhangsan","age":30},{"id":2,"name":"lisi","age":20},{"id":2,"name":"lisi","age":20}] Person [id=1, name=zhangsan, age=30] Person [id=2, name=lisi, age=20] Person [id=2, name=lisi, age=20]

四.总结。

如果你在开发的时候没有使用第三库去解析JSON,那么解析过程是很繁琐的。使用第三方库后,解析就很方便快捷。(建议大家在解析JSON数据时,先尽量不要使用第三方库,而使用SDK提供的API去解析数据,这样你对JSON数据以及SDK都会了解的更深刻)

PS:比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量,但缺点在于,它的语义较差,看起来不如XML直观。

PS:示例代码下载

推荐文章, java web开发(一) 环境搭建

JSON 解析

Android学习资料整理

json格式化工具

帮助文档:JSON 入门指南

JSON中文网

http://www.jsqmd.com/news/1378498/

相关文章:

  • Linux文件权限管理:chmod命令详解与实战应用
  • 王向军律师口碑怎么样 - 工业推荐榜
  • MFC与OpenCV结合开发桌面图像处理应用实战指南
  • 2026电子书平台终极选型:多场景实测,哪个平台阅读最省心?
  • SpringBoot+微信小程序校园二手交易平台开发实践
  • 2026深圳同城跨区搬家怎么选?实惠正规运输渠道科普指南 - 深圳顺风搬迁
  • 短剧源码如何搭建海外内容平台,短剧系统与短剧 APP 开发需要关注哪些关键点 - 壹软科技
  • 美团AI顶会论文精讲:从业务场景到技术落地的工业实践
  • Visual Studio新手高效配置指南:从项目创建到快捷键与调试技巧
  • C++入门利器CFree:轻量级IDE安装配置与实战指南
  • 得物笔试真题解析:算法与数据结构实战技巧
  • 账号成长期的环境稳定性:多账号浏览器的指纹一致性工程
  • Spring Boot Maven插件解析失败:系统化排查与解决方案
  • Cesium三维GIS标绘:DrawHandler线段绘制原理与实战
  • 2026年肇庆选泰红茶汤生产厂选哪个好 用户力荐 - 工业推荐榜
  • Claude Fable 5系统提示词解析:如何构建工业级AI叙事引擎
  • C++游戏开发:实时碰撞检测优化与均匀网格实现
  • 泉州CMA甲醛检测室内甲醛治理四家实测新房/家装/工装 - 专注室内空气检测治理
  • Windows平台终极指南:三分钟搭建专业级Syslog服务器
  • 安徽省2026年专升本招生工作安排发布!报名3月23日启动,4月18日考试 - 小张zc
  • 当Python遇见电磁波:用FDTD开启三维电磁仿真的奇幻之旅
  • Kimi开放K3模型权重:从API消费到私有化部署的战略转型与开发者机遇
  • Java面试谈话中,如何清晰讲清JVM内存模型
  • 从关键词输入到终稿输出,Gradpaper每个功能模块都在为你的论文保驾护航
  • IM开发实战:从文件传输到消息模型,构建高效媒体消息系统
  • 北京打印机租赁平台精选,深度解析服务差异 - 优企甄选
  • Mysql 利用group by 分组排序
  • SpringBoot3+Vue3+MySQL 信息安全意识培训系统前后端分离源码
  • 终极音乐解锁指南:如何免费解锁10+加密音乐格式的完整方案
  • 企业AI落地实战:从概念到AI Agent应用的全链路解析