Json详解

Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用 Java 做 Web 开发时,不可避免的会遇到 Json 的使用。

JSON形式与语法

我们先来看以下数据:

{
"ID": "1001",
"name": "张三",
"age": "24"
}

观察它的数据形式,可以得出以下语法:

  1. 数据在花括号中
  2. 数据以键:值对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他 json 对象)
  3. 每两个键:值对以逗号分隔(最后一个键:值对省略逗号)

遵守上面3点,便可以形成一个json对象。

JSON对象数组

接下来我们再看第二个数据:

[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}
]

观察它的数据形式,可以得出以下语法:

  1. 数据在方括号中(可理解为数组)
  2. 方括号中每个数据以 json 对象形式出现
  3. 每两个数据以逗号分隔(最后一个无需逗号)

遵守上面3点,便可形成一个 json 对象数组(及一个数组中,存储了多个 json 对象)

理解了上面两种基本的形式,我们就可以得出其他的数据形式,例如下面这个:

{
"部门名称":"研发部",
"部门成员":[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}],
"部门位置":"xx楼21号"
}

这是上面两个基本形式结合出来的一种变形,通过这种变形,使得数据的封装具有很大的灵活性,能让开发者自由的发挥想象力。

总结:json 可以简单的分为基本形式:json 对象,json 对象数组。两种基本格式组合变形出其他的形式,但其本质还是 json 对象或者 json 对象数组中的一种。json 对象或对象数组可以转化为 json 字符串,使用于不同的场合。

FastJson

介绍

JSON 协议使用方便,越来越流行,JSON 的处理器有很多,这里我介绍一下FastJson,FastJson 是阿里的开源框架,被不少企业使用,是一个极其优秀的 Json 框架,Github 地址: FastJson。

FastJson的特点

  1. FastJson数度快,无论序列化和反序列化,都是当之无愧的fast
  2. 功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
  3. 零依赖(没有依赖其它任何类库)

Fastjson中的经常调用的方法

  • parse(String text);: 把JSON文本parse为JSONObject或者JSONArray
  • parseObject(String text);: 把JSON文本parse成JSONObject
  • parseArray(String text);: 把JSON文本parse成JSONArray
  • toJSONString(Object object);: 将JavaBean序列化为JSON文本

实例

服务器接收请求数据,发送 JSON 回浏览器,并根据不同的请求方式,分别解决中文乱码问题:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/json;charset=utf-8");
//允许所有IP地址和端口请求
response.setHeader("Access-Control-Allow-Origin", "*");
//允许所有的文档类型请求
response.setHeader("Access-Control-Content-Type", "*");
HashMap<String, String> map = new HashMap<String, String>();
map.put("user", new String(request.getParameter("user").getBytes("ISO-8859-1"),"utf-8"));
map.put("psw", new String(request.getParameter("psw").getBytes("ISO-8859-1"),"utf-8"));
System.out.println(new String(request.getParameter("user").getBytes("ISO-8859-1"),"utf-8"));
String jsonString = JSON.toJSONString(map);
response.getWriter().println(jsonString);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/json;charset=utf-8");
//允许所有IP地址和端口请求
response.setHeader("Access-Control-Allow-Origin", "*");
//允许所有的文档类型请求
response.setHeader("Access-Control-Content-Type", "*");
HashMap<String, String> map = new HashMap<String, String>();
map.put("user", request.getParameter("user"));
map.put("psw", request.getParameter("psw"));
System.out.println(request.getParameter("user"));
String jsonString = JSON.toJSONString(map);
response.getWriter().println(jsonString);
}

服务器接收 JSON 并取出数据发回浏览器:

浏览器:

 $.ajax({
url: 'http://localhost:8080/RequestNResponse/GetJSON',
method: 'GET',
data: {
json:
`{
"username": "张三",
"age": 23,
"hobby":["篮球","足球","羽毛球"]
}`
},
complete: function (res) {
console.log(res)
$('body').append(`<h1>${res.responseText}</h1>`)
}
})

服务器:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//允许所有IP地址和端口请求
response.setHeader("Access-Control-Allow-Origin", "*");
//允许所有的文档类型请求
response.setHeader("Access-Control-Content-Type", "*");
String jsonStr = new String(request.getParameter("json").getBytes("ISO-8859-1"), "utf-8");
JSONObject object = JSON.parseObject(jsonStr);
response.getWriter().println("username:" + object.get("username"));
response.getWriter().println("username:" + object.get("age"));
JSONArray hobbies = (JSONArray) object.get("hobby");
hobbies.forEach(obj -> {
try {
response.getWriter().println(obj);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//允许所有IP地址和端口请求
response.setHeader("Access-Control-Allow-Origin", "*");
//允许所有的文档类型请求
response.setHeader("Access-Control-Content-Type", "*");
String jsonStr = request.getParameter("json");
JSONObject object = JSON.parseObject(jsonStr);
response.getWriter().println("username:" + object.get("username"));
response.getWriter().println("username:" + object.get("age"));
JSONArray hobbies = (JSONArray) object.get("hobby");
hobbies.forEach(obj -> {
try {
response.getWriter().println(obj);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}

FastJson 介绍的更多相关文章

  1. Fastjson介绍

    简单介绍 Fastjson是一个Java语言编写的高性能功能完好的JSON库. 高性能 fastjson採用独创的算法,将parse的速度提升到极致,超过全部json库,包含以前号称最快的jackso ...

  2. Java FastJson 介绍

    1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...

  3. [转]fastjson

    原文地址:http://www.cnblogs.com/zhenmingliu/archive/2011/12/29/2305775.html FastJSON是一个很好的java开源json工具类库 ...

  4. FastJSON 简介及其Map/JSON/String 互转

    在日志解析,前后端数据传输交互中,经常会遇到 String 与 map.json.xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言.跨前后端的事实上的标准数据交互格式.应该来说各个 ...

  5. fastjson 使用方法

    Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一. 2.功能qiang打,支持JDK的各种类型 ...

  6. FastJson的使用方法总结

    本文参考:http://www.tuicool.com/articles/zUbQfa 还可参考:https://www.iflym.com/index.php/code/alibaba-fastjs ...

  7. FastJSON应用前测试--转载

    FastJSON 应用前测试   FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   ...

  8. 8 fastJson的使用

    Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一. 2.功能qiang打, ...

  9. FastJSON应用前测试

    FastJSON 应用前测试 FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.\ 实际 ...

随机推荐

  1. CF1153F Serval and Bonus Problem 【期望】

    题目链接:洛谷 作为一只沉迷数学多年的蒟蒻OIer,在推柿子和dp之间肯定要选推柿子的! 首先假设线段长度为1,最后答案乘上$l$即可. 对于$x$这个位置,被区间覆盖的概率是$2x(1-x)$(线段 ...

  2. 从 s 点到 t 点的最短路(简单模板)(迪杰斯特拉)

    迪杰斯特拉简单版 #include <bits/stdc++.h> using namespace std; int m,n; const int inf = 0x3f3f3f3f; in ...

  3. MySQL数据分析-(6)数据库设计之规范化

    大家好,我是jacky,很高兴继续跟大家学习MySQL数据分析这门课,上次课我们介绍了E-R图,我们要给手机销售公司设计数据库,那么同一个项目,10个设计人员可能设计出10种不同的E-R图:因为不同的 ...

  4. 【学习笔记】OI模板整理

    CSP2019前夕整理一下模板,顺便供之后使用 0. 非算法内容 0.1. 读入优化 描述: 使用getchar()实现的读入优化. 代码: inline int read() { int x=0; ...

  5. nginx使用certbot配置https

    一般现在的网站都要支持https,即安全的http. 机器:阿里云Ubuntu 16.04.3 LTS 方案一:自己申请证书 配置时需要确保有ssl模块, 之后域名解析下, 之后时申请证书,可以去阿里 ...

  6. 【分享】《美国数学本科生,研究生基础课程参考书目(个人整理)》[DJVU][VERYCD]

    目录: 第一学年 几何与拓扑: 1.James R. Munkres, Topology:较新的拓扑学的教材适用于本科高年级或研究生一年级: 2.Basic Topology by Armstrong ...

  7. 牛顿法与拟牛顿法(四) BFGS 算法

    转自 https://blog.csdn.net/itplus/article/details/21897443

  8. WIN7+Qt5.2.0连接oracle数据库的oci驱动的编译

    一.前提安装 1.需要安装QT5.2.0,本介绍安装的是qt-windows-opensource-5.2.0-mingw48_opengl-x86-offline.exe: 本文安装目录:c:\Qt ...

  9. centos7 安装 mysql(在线安装)

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum Re ...

  10. shell生成指定范围随即整数

    #!/bin/bash function rand(){ min=$ max=$(($-$min+)) num=$( | cksum | awk -F ' ' '{print $1}') echo $ ...