JSON 文件

什么是 JSON

JSON(JavaScript Object Notation),即 JS 对象符号。 是一种轻量级(相对于 XML 来说)的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON 采用完全独立于语言的文本格式,而且很多语言都提供了对 JSON 的支持,也有很多优秀的第三方库,这使得 JSON 成为理想的数据交换格式。其中数据交换指的是客户端和服务器之间的业务数据的传递格式。

JSON 在 JS 中的使用

JSON 的定义

  • 由键值对组成,并且由花括号包围
  • 每个键由引号引起来
  • 键和值之间使用冒号进行分隔,多组键值对之间进行逗号进行分隔
  1. var jsonObj = {
  2. "key1": 12,
  3. "key2": "abc",
  4. "key3": true,
  5. "key4": [11, "arr", false],
  6. "key5": {
  7. "key5_1": 551,
  8. "key5_2": "key5_2_value"
  9. },
  10. "key6":[{
  11. "key6_1_1": 6611,
  12. "key6_1_2": "key6_1_2_value"
  13. }, {
  14. "key6_2_1": 6621,
  15. "key6_2_2": "key6_2_2_value"
  16. }]
  17. };

JSON 的访问

  • 它本身是一个对象,其中的 key 可以理解为是对象中的一个属性
  • key 访问就跟访问对象的属性一样: JSON 对象.key
  1. alert(typeof(jsonObj));// object, 说明 json 就是一个对象
  2. alert(jsonObj.key1); // 12
  3. alert(jsonObj.key2); // abc
  4. alert(jsonObj.key3); // true
  5. alert(jsonObj.key4);// 得到数组[11,"arr",false]
  6. // json 中 数组值的遍历
  7. for(var i = 0; i < jsonObj.key4.length; i++) {
  8. alert(jsonObj.key4[i]);
  9. }
  10. alert(jsonObj.key5.key5_1);//551
  11. alert(jsonObj.key5.key5_2);//key5_2_value
  12. alert(jsonObj.key6 );// 得到 json 数组
  13. // 取出来每一个元素都是 json 对象
  14. var jsonItem = jsonObj.key6[0];
  15. // alert( jsonItem.key6_1_1 ); //6611
  16. alert( jsonItem.key6_1_2 ); //key6_1_2_value

JSON 的常用方法

  • JSON 的存在形式:

    • 对象的形式存在,称作 JSON 对象,操作 JSON 中的数据时需要这种形式
    • 字符串的形式存在,称作 JSON 字符串,在客户端和服务器之间进行数据交换时需要这种形式
  • JSON.stringfy() 把 JSON 对象 转换为 JSON 字符串
  • JSON.parse() 把 JSON 字符串 转换为 JSON 对象
  1. // 把 json 对象转换成为 json 字符串
  2. var jsonObjString = JSON.stringify(jsonObj); // 特别像 Java 中对象的 toString
  3. alert(jsonObjString)
  4. // 把 json 字符串转换成为 json 对象
  5. var jsonObj2 = JSON.parse(jsonObjString);
  6. alert(jsonObj2.key1);// 12
  7. alert(jsonObj2.key2);// abc

JSON 在 Java 中的使用

这里以 gson 为例。

JavaBean 和 JSON 的互转

  1. package cn.parzulpan.test;
  2. import cn.parzulpan.bean.User;
  3. import com.google.gson.Gson;
  4. /**
  5. * @Author : parzulpan
  6. * @Time : 2020-12-14
  7. * @Desc : JavaBean 和 JSON 的互转
  8. */
  9. public class JavaBeanAndJSON {
  10. public static void main(String[] args) {
  11. // 创建 JavaBean 对象
  12. User user = new User(1, "parzulpan", "123456", "parzulpan@321.com");
  13. // 创建 Gson 对象
  14. Gson gson = new Gson();
  15. // toJson 方法可以把 java 对象转换成为 json 字符串
  16. String userJsonString = gson.toJson(user);
  17. System.out.println(userJsonString);
  18. // fromJson 把 json 字符串转换回 Java 对象
  19. // 第一个参数是 json 字符串
  20. // 第二个参数是转换回去的 Java 对象类型,对于 JavaBean 可以直接 .class
  21. User user1 = gson.fromJson(userJsonString, User.class);
  22. System.out.println(user1);
  23. }
  24. }

List 和 JSON 的互转

  1. package cn.parzulpan.test;
  2. import cn.parzulpan.bean.User;
  3. import com.google.gson.Gson;
  4. import com.google.gson.reflect.TypeToken;
  5. import java.util.ArrayList;
  6. /**
  7. * @Author : parzulpan
  8. * @Time : 2020-12-14
  9. * @Desc : List 和 JSON 的互转
  10. */
  11. public class ListAndJSON {
  12. public static void main(String[] args) {
  13. ArrayList<User> userList = new ArrayList<>();
  14. userList.add(new User(1, "parzulpan", "123456", "parzulpan@321.com"));
  15. userList.add(new User(null, "tom", "214531", "tom@321.com"));
  16. Gson gson = new Gson();
  17. // 把 List 转换为 JSON 字符串
  18. String userListJsonString = gson.toJson(userList);
  19. System.out.println(userListJsonString);
  20. // 把 JSON 字符串 转换为 List,对于集合,第二个参数需要 Type typeOfT
  21. // 为了确保范型,需要实现一个类继承 TypeToken
  22. System.out.println(new UserListType().getType()); // class java.util.ArrayList
  23. System.out.println(new UserListType().getRawType()); // class cn.parzulpan.test.UserListType
  24. ArrayList<User> list = gson.fromJson(userListJsonString, new UserListType().getType());
  25. System.out.println(list);
  26. User user = list.get(0);
  27. System.out.println(user);
  28. }
  29. }
  30. class UserListType extends TypeToken<ArrayList<User>> {
  31. }

Map 和 JSON 的互转

  1. package cn.parzulpan.test;
  2. import cn.parzulpan.bean.User;
  3. import com.google.gson.Gson;
  4. import com.google.gson.reflect.TypeToken;
  5. import java.util.ArrayList;
  6. import java.util.LinkedHashMap;
  7. import java.util.Map;
  8. /**
  9. * @Author : parzulpan
  10. * @Time : 2020-12-14
  11. * @Desc : Map 和 JSON 的互转
  12. */
  13. public class MapAndJSON {
  14. public static void main(String[] args) {
  15. Map<Integer, User> userMap = new LinkedHashMap<>();
  16. userMap.put(1, new User(1, "parzulpan", "123456", "parzulpan@321.com"));
  17. userMap.put(2, new User(null, "tom", "214531", "tom@321.com"));
  18. Gson gson = new Gson();
  19. String userMapJsonString = gson.toJson(userMap);
  20. System.out.println(userMapJsonString);
  21. // Map<Integer, User> userMap1 = gson.fromJson(userMapJsonString, new UserMapType().getType());
  22. // 或者用匿名类,推荐这种做法
  23. Map<Integer, User> userMap1 = gson.fromJson(userMapJsonString, new TypeToken<LinkedHashMap<Integer, User>>() {
  24. }.getType());
  25. System.out.println(userMap1);
  26. User user = userMap1.get(1);
  27. System.out.println(user);
  28. }
  29. }
  30. class UserMapType extends TypeToken<LinkedHashMap<Integer, User>> {
  31. }

开源类库

gson

Gson 是目前功能最全的 Json 解析神器,Gson 当初是为 Google 公司内部需求而由 Google 自行研发而来,但自从在 2008 年五月公开发布第一版后已被许多公司或用户应用。

Gson 的应用主要为 toJson 与 fromJson 两个转换函数,无依赖,不需要例外额外的 jar,能够直接跑在 JDK 上。

在使用这种对象转换之前,需先创建好对象的类型以及其成员才能成功的将 JSON 字符串成功转换成相对应的对象。类里面只要有 get 和 set 方法,Gson 完全可以实现复杂类型的 json 和 bean 的相互转换转换。

  1. public class GsonUtil {
  2. private static Gson gson = new GsonBuilder().create();
  3. public static String bean2Json(Object obj) {
  4. return gson.toJson(obj);
  5. }
  6. public static <T> T json2Bean(String jsonStr, Class<T> objClass) {
  7. return gson.fromJson(jsonStr, objClass);
  8. }
  9. public static String jsonFormatter(String uglyJsonStr) {
  10. Gson gson = new GsonBuilder().setPrettyPrinting().create();
  11. JsonParser jp = new JsonParser();
  12. JsonElement je = jp.parse(uglyJsonStr);
  13. return gson.toJson(je);
  14. }
  15. }

fastjson

Fastjson 是一个 Java 语言编写的高性能的 JSON 处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的 jar,能够直接跑在JDK上。

FastJson 在复杂类型的 Bean 转换 Json 上会出现一些问题,可能会出现引用的类型,导致 Json 转换出错,需要制定引用。FastJson 采用独创的算法,将 parse 的速度提升到极致,超过所有 json 库。

  1. public class FastJsonUtil {
  2. public static String bean2Json(Object obj) {
  3. return JSON.toJSONString(obj);
  4. }
  5. public static <T> T json2Bean(String jsonStr, Class<T> objClass) {
  6. return JSON.parseObject(jsonStr, objClass);
  7. }
  8. }

jackson

Jackson 社区相对比较活跃,更新速度也比较快,从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一,Spring MVC 的默认 json 解析器便是 Jackson。

Jackson 的核心模块由三部分组成:

  • jackson-core 核心包,提供基于”流模式”解析的相关 API,它包括 JsonPaser 和 JsonGenerator。Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json
  • jackson-annotations 注解包,提供标准注解功能
  • jackson-databind 数据绑定包,提供基于”对象绑定” 解析的相关 API( ObjectMapper )和”树模型” 解析的相关 API(JsonNode);基于”对象绑定” 解析的 API 和”树模型”解析的 API 依赖基于”流模式”解析的 API
  1. public class JacksonUtil {
  2. private static ObjectMapper mapper = new ObjectMapper();
  3. public static String bean2Json(Object obj) {
  4. try {
  5. return mapper.writeValueAsString(obj);
  6. } catch (JsonProcessingException e) {
  7. e.printStackTrace();
  8. return null;
  9. }
  10. }
  11. public static <T> T json2Bean(String jsonStr, Class<T> objClass) {
  12. try {
  13. return mapper.readValue(jsonStr, objClass);
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. return null;
  17. }
  18. }
  19. }

练习和总结

【JavaWeb】JSON 文件的更多相关文章

  1. ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...

  2. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  3. C#解析json文件的方法

    C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...

  4. Json.NET读取和写入Json文件

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. 纯前端JSON文件编辑器[0]

    准备工作 参考资料: FileReader(用来获取上传文件的数据) <download>(用来设置下载文件的名称) Blob(用来存储数据的一个容器) createObjectURL(用 ...

  6. gulp-rev同时将js和css文件写在一个rev-manifest.json文件里面的方式探讨

    参考: https://segmentfault.com/q/1010000002876613 https://github.com/sindresorhus/gulp-rev 测试发现,在官网上最主 ...

  7. Elasticsearch集群状态脚本及grafana监控面板导出的json文件

    脚本文件: #!/usr/bin/env python import datetime import time import urllib import json import urllib2 imp ...

  8. grafana日志分析界面及导出的json文件

    日志分析面板导出的json文件,效果图如下: 下载地址:http://files.cnblogs.com/files/xiaoming279/%E9%9D%A2%E6%9D%BF.zip 主机面板 主 ...

  9. 访问本地json文件因跨域导致的问题

    我使用jquery的getJSON的方法获取本地的json文件,并进行操作,获取json 数据代码如下: $.getJSON("invite_panel.json",functio ...

随机推荐

  1. 【SDOI2017】相关分析(线段树)

    Description 你需要维护一个长度为 \(n\) 的实数对的序列,第 \(i\) 个元素为 \((x_i, y_i)\).现有 \(m\) 次操作: \(\texttt{1 L R}\):设区 ...

  2. FreeSql.Repository (一)什么是仓储

    欢迎来到<FreeSql.Repository 仓储模式>系列文档,完整文档请前往 wiki 中心:https://github.com/dotnetcore/FreeSql/wiki F ...

  3. airtest数据线连接手机

    1.用USB数据将手机和电脑进行连接,手机打开开发者模式,并且开启USB调试   2.下载adb调试:只是用户检查有没有设备连接,不下载也行,但是最好下载 使用方法:解压 方法一:使用cmd命令进入解 ...

  4. 哔哩哔哩批量采集器(支持windows和mac)

    链接:https://pan.baidu.com/s/1jW2ea0Cl1xL5xN9DuB8Fcw  密码:klyw

  5. 精尽Spring MVC源码分析 - WebApplicationContext 容器的初始化

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  6. svn工具包+安装教程+使用ip访问

    SVN使用 简介: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.  Server界面 1: 安装这两个文 ...

  7. 安装VisualStudioCode

    下载VisualStudioCode https://code.visualstudio.com/ 安装插件

  8. Hibernate Tools插件在线安装

    1.查看你的Eclipse的版本:Help | About Eclipse Version: Oxygen.2 Release(4.11.0) 2.HibernateTools的下载地址为:http: ...

  9. Unity 打包Shader优化

    我们一直以来的项目Shader基本都会打包到一个package里面,游戏启动时会进行预加载这个Package,且预加载其中一些常用的Shader,最近新发现一个坑点,那就是shader依赖了特效的一些 ...

  10. 用Python实现童年小游戏贪吃蛇

    贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中.