【JSON教科书】什么是JSON,JSON字符串有什么作用?(JSON学习总结)
文章目录
- @[toc]
- 一、了解Json
- 3.1 什么是Json
- 二、简单Json语法
- 2.1 语法
- 3.2.1 Json语法记忆规则
- 三、Json字符串的手写转换
- JavaBean类对象
- Json简单手写转换
- 四、了解Jackson工具
- 4.1 Jackson简介
- 4.2 jar包介绍
- 4.3 应用场景
- 五、Jackson解析
- 5.1 Java对象转换json字符串
- 5.2 json字符串转换Java对象
- 六、FastJson解析
一、了解Json
3.1 什么是Json
JSON
(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
简单来说,
json
字符串指的就是json
本身,由于JavaScript
是弱类型语言,所以没有办法直接传递对象或是数组,所以提出了json
格式的字符串,用于数据传递;
ajax
中,我们自己拼接的是一个JSON对象,因为它是无数据类型的,所以JS
根据其格式默认其是对象,要是往后台发,要先把它转换成JSON字符
。
从ajax
的服务器 发过来的,一定是字符串,你想要把它解析,很简单,把它先变成JSON对象才行。在数据传输过程中,
json
是以文本,即字符串的形式传递的,而JS
操作的是JSON对象
,所以JSON对象
和JSON字符串
之间的相互转换是关键。
二、简单Json语法
2.1 语法
- 一个数据的表示
- {“键1”:值1,“键2”:值2}
- 一组数据的表示
- [{“键1”:值1,“键2”:值2},{“键1”:值1,“键2”:值2}]
- JSON 对象使用在大括号 {} 中书写。
- 对象可以包含多个 **key/value(键/值)**对。
- key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
- key 和 value 中使用冒号 : 分割。
- 每个 key/value 对使用逗号 , 分割。
语法 | 描述 |
---|---|
[ ] | 表示数组 |
{ } | 表示对象 |
" " | 表示是属性名或字符串类型的值 |
: | 表示属性和值之间的分隔符 |
, | 表示多个属性的间隔符或者是多个元素的间隔符 |
3.2.1 Json语法记忆规则
- 数据在键值对里面
- 数据之间由逗号分隔
- 大括号保存对象
- 中括号保存数组
Json值 | 描述 |
---|---|
数字 | 整数或浮点数 |
字符串 | 在双引号中 |
逻辑值 | true 或 false |
数组 | 在中括号中 |
对象 | 在大括号中 |
null |
<script type="text/javascript">//对象表示var p = new Object();p.name = "haha";p.age = 20;p.address = "beijing";console.log(p.name + "..." + p.age + "...." + p.address);//json表示var p1 = {"name": "李四", "age": 30, "address": "上海"};console.log(p1.name + "..." + p1.age + "...." + p1.address);var json = '{"name":"李四","age":30,"address":"杭州"}';//json字符串var p2 = JSON.parse(json);console.log(p2.name + "..." + p2.age + "...." + p2.address);//要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法://var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'//要实现从 JSON 转换为对象,使用 JSON.parse() 方法://var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}//表示数组var arr = ["北京", "上海", "南京"];//表示json对象数组var arr2 = [{name: "xxx", age: 20}, {name: "yyy", age: 22}, {name: "zzz", age: 30}];
</script>
三、Json字符串的手写转换
JavaBean类对象
package com.mylifes1110.java.demo;/*** 省份*/
public class Province {private Integer pId;private String pName;public Province() {}public Province(Integer pId, String pName) {this.pId = pId;this.pName = pName;}public Integer getpId() {return pId;}public String getpName() {return pName;}public void setpId(Integer pId) {this.pId = pId;}public void setpName(String pName) {this.pName = pName;}@Overridepublic String toString() {return "Province{" + "pId=" + pId + ", pName='" + pName + '\'' + '}';}
}
Json简单手写转换
package com.mylifes1110.java.demo;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 此案例不需要启动,只是演示Json字符串的转换过程(启动无效)*/
public class Demo {public static void main(String[] args) {// 单一对象Province p1 = new Province(1, "河北省");Province p2 = new Province(2, "北京市");// p1 -> json字符串// pId=1、pName="河北省"String jsonStr1 = "{'pId':1,'pName':'河北省'}";String jsonStr2 = "{'pId':2,'pName':'北京市'}";// 一组对象 (List集合、Map集合)// List集合// ProvinceList<Province> provinceList = new ArrayList<>();provinceList.add(p1);provinceList.add(p2);// provinceList -> json字符串String jsonStr3 = "[{'pId':1,'pName':'河北省'},{'pId':2,'pName':'北京市'}]";// Map集合// entry : 键值对对象Map<String, Province> map = new HashMap<>();map.put("p1", p1);map.put("p2", p2);// map -> json字符串String jsonStr4 = "{'p1':{'pId':1,'pName':'河北省'},'p2':{'pId':2,'pName':'北京市'}}";}
}
四、了解Jackson工具
4.1 Jackson简介
Jackson 是一个能够将java对象序列化为JSON字符串,也能够将JSON字符串反序列化为 java对象的框架。
4.2 jar包介绍
- jackson-annotations-2.9.8.jar
- jackson-core-2.9.8.jar
- jackson-databind-2.9.8.jar
下载链接:[https://github.com/Ziphtracks/JavaLearningmanual/tree/master/jar%20repositories](https://github.com/Ziphtracks/JavaLearningmanual/tree/master/jar repositories)
注意: 2.9.8版本是使用认数最多的版本!
4.3 应用场景
- json字符串转换Java对象、List集合、Map集合
- Java对象、List集合对象、Map集合对象转换json字符串
五、Jackson解析
方法/注解 | 描述 |
---|---|
@JsonProperty注解 | 指定一个属性用于JSON映射,默认情况下映射的JSON属性与注解的属性名称相同,不过可以使用该注解的value值修改JSON属性名 |
@JsonIgnore注解 | 用于排除某个属性,这样该属性就不会被Jackson序列化和反序列化。 |
mapper.enable(SerializationFeature.INDENT_OUTPUT); | 美化JSON字符串格式化输出 |
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); | 允许序列化空的POJO类(否则会抛出异常) |
注意:Jackson解析json字符串内部必须是双引号
5.1 Java对象转换json字符串
package com.mylifes1110.java.demo;import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class JacksonDemo {public static void main(String[] args) throws IOException {Province p1 = new Province(1, "河北省");Province p2 = new Province(2, "北京市");/*** Java对象转换json字符串*/ObjectMapper objectMapper = new ObjectMapper();String jsonStr = objectMapper.writeValueAsString(p1);System.out.println(jsonStr); //{"pId":1,"pName":"河北省"}List<Province> list = new ArrayList<>();list.add(p1);list.add(p2);String jsonList = objectMapper.writeValueAsString(list);System.out.println(jsonList); //[{"pId":1,"pName":"河北省"},{"pId":2,"pName":"北京市"}]Map<String, Province> map = new HashMap<>();map.put("p1", p1);map.put("p2", p2);String jsonMap = objectMapper.writeValueAsString(map);System.out.println(jsonMap); //{"p1":{"pId":1,"pName":"河北省"},"p2":{"pId":2,"pName":"北京市"}}}
}
5.2 json字符串转换Java对象
package com.mylifes1110.java.demo;import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class JacksonDemo {public static void main(String[] args) throws IOException {Province p1 = new Province(1, "河北省");Province p2 = new Province(2, "北京市");/*** Java对象转换json字符串*/ObjectMapper objectMapper = new ObjectMapper();String jsonStr = objectMapper.writeValueAsString(p1);System.out.println(jsonStr); //{"pId":1,"pName":"河北省"}List<Province> list = new ArrayList<>();list.add(p1);list.add(p2);String jsonList = objectMapper.writeValueAsString(list);System.out.println(jsonList); //[{"pId":1,"pName":"河北省"},{"pId":2,"pName":"北京市"}]Map<String, Province> map = new HashMap<>();map.put("p1", p1);map.put("p2", p2);String jsonMap = objectMapper.writeValueAsString(map);System.out.println(jsonMap); //{"p1":{"pId":1,"pName":"河北省"},"p2":{"pId":2,"pName":"北京市"}}/*** json字符串转换Java对象*/Province provinceP1 = objectMapper.readValue(jsonStr,Province.class);System.out.println(provinceP1); //Province{pId=1, pName='河北省'}List provinceList = objectMapper.readValue(jsonList, List.class);System.out.println(provinceList); //[{pId=1, pName=河北省}, {pId=2, pName=北京市}]Map provinceMap = objectMapper.readValue(jsonMap, Map.class);System.out.println(provinceMap); //{p1={pId=1, pName=河北省}, p2={pId=2, pName=北京市}}}
}
六、FastJson解析
方法/注解 | 描述 |
---|---|
@JSONField(serialize=false)注解 | 控制不序列化某些属性,默认是true |
SerializerFeature.PrettyFormat | 控制输出 |
SerializerFeature.WriteMapNullValue | Java对象中的null也生成JSON字符串,null也输出 |
SerializerFeature.WriteNullStringAsEmpty | null输出为空字符串,null输出为 “” |
SerializerFeature.DisableCircularReferenceDetect | 循环引用检测 |
public class FASTJson {//解析@Testpublic void test1() {// 对象嵌套数组嵌套对象String json1 = "{'id':1,'name':'Java','stus':[{'id':101,'name':'王五','age':16}]}";// 数组String json2 = "['北京','天津','杭州']";//1、//静态方法转成对象Grade grade=JSON.parseObject(json1, Grade.class);System.out.println(grade);//转成数组List<String> list=JSON.parseArray(json2, String.class);System.out.println(list);}//生成@Testpublic void test2(){ArrayList<Student> list=new ArrayList<>();for(int i=1;i<3;i++){list.add(new Student(101 + i, "李四", 20 + i));}Grade grade=new Grade(100001,"张三", list);String json=JSON.toJSONString(grade);System.out.println(json);}
}
【JSON教科书】什么是JSON,JSON字符串有什么作用?(JSON学习总结)相关推荐
- node.js中的字符串、对象和json处理函数
querystring.parse() 将字符串转成对象,就是把url上带的参数串转成数组对象. querystring.parse(str, [sep], [eq], [options]) 接收参数 ...
- python类型转换异常_python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换...
python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- python: 判断字符串是否为合法的json格式
转自:https://blog.csdn.net/benben0729/article/details/80880180 在一些情况下,我们需要判断字符串是否为合法json格式. 思路很简单:尝试对字 ...
- [js] 处理字符串换行造成的json解析失败
需求:从数据库某个字段取出字符串出来,转为json,结果发现报错为 解析失败,发现是因为取出的字符串换行导致,现在需要将字符串里面的换行替换为'',使字符串可依成功解析成json对象. 技术:依靠re ...
- python 判断字符串时是否是json格式方法
在实际工作中,有时候需要对判断字符串是否为合法的json格式 解决方法使用json.loads,这样更加符合'Pythonic'写法 代码示例: Python import json def is_j ...
- json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- c#解析json字符串数组_C#解析JSON字符串总结
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- java js对象转字符串数组_js 转json格式的字符串为对象或数组(前后台)的方法
一.前台 // 转换成对象 var myObject = JSON.parse(_data); alert("对象:"+myObject.msg); // 转换成数组 var my ...
最新文章
- Python练习题(day1)
- linux安装tree命令
- View绘制--onMeasure() 、onLayout()
- Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
- 《Supervised Descent Method and its Applications to Face Alignment》阅读笔记
- 说说设计模式~桥梁模式(Bridge)
- 项目案例模板之登录注册的实现
- php生成成语,洪恩在线成语词典小偷程序php版_PHP教程
- SiTime硅晶振解决方案—汽车摄像头
- myBatis约束文档
- 爬虫笔记34:mongodb的概述(安装和启动)、基本命令、练习题
- python .center用法_python之testcenter操作
- 关于浏览器核心的一些思考
- 计算机员工信息登录表的论文,企业员工信息管理系统(论文+程序)
- 01【股票初级】-【找准入场时机】投资五大流派,好公司投资法,判断单只股票是否便宜?如何找准时机入场?
- 三人表决器与八人抢答器实验
- excel转word_pdf转word软件永久jpg图片ppt转换excel编辑器压缩合并拆分去水印,加入自律圈即可获得!!!...
- 除了欧拉公式,这8个数学公式也足够美丽且神奇
- 宏颜获水: 百度ceo 李彦宏惨槽泼水,懵了!
- android系统允许icon角标,安卓手机角标显示方案