文章目录

  • @[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语法记忆规则

  1. 数据在键值对里面
  2. 数据之间由逗号分隔
  3. 大括号保存对象
  4. 中括号保存数组
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 应用场景

  1. json字符串转换Java对象、List集合、Map集合
  2. 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学习总结)相关推荐

  1. node.js中的字符串、对象和json处理函数

    querystring.parse() 将字符串转成对象,就是把url上带的参数串转成数组对象. querystring.parse(str, [sep], [eq], [options]) 接收参数 ...

  2. python类型转换异常_python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换...

    python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...

  3. Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  4. python: 判断字符串是否为合法的json格式

    转自:https://blog.csdn.net/benben0729/article/details/80880180 在一些情况下,我们需要判断字符串是否为合法json格式. 思路很简单:尝试对字 ...

  5. [js] 处理字符串换行造成的json解析失败

    需求:从数据库某个字段取出字符串出来,转为json,结果发现报错为 解析失败,发现是因为取出的字符串换行导致,现在需要将字符串里面的换行替换为'',使字符串可依成功解析成json对象. 技术:依靠re ...

  6. python 判断字符串时是否是json格式方法

    在实际工作中,有时候需要对判断字符串是否为合法的json格式 解决方法使用json.loads,这样更加符合'Pythonic'写法 代码示例: Python import json def is_j ...

  7. json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  8. c#解析json字符串数组_C#解析JSON字符串总结

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  9. java js对象转字符串数组_js 转json格式的字符串为对象或数组(前后台)的方法

    一.前台 // 转换成对象 var myObject = JSON.parse(_data); alert("对象:"+myObject.msg); // 转换成数组 var my ...

最新文章

  1. Python练习题(day1)
  2. linux安装tree命令
  3. View绘制--onMeasure() 、onLayout()
  4. Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
  5. 《Supervised Descent Method and its Applications to Face Alignment》阅读笔记
  6. 说说设计模式~桥梁模式(Bridge)
  7. 项目案例模板之登录注册的实现
  8. php生成成语,洪恩在线成语词典小偷程序php版_PHP教程
  9. SiTime硅晶振解决方案—汽车摄像头
  10. myBatis约束文档
  11. 爬虫笔记34:mongodb的概述(安装和启动)、基本命令、练习题
  12. python .center用法_python之testcenter操作
  13. 关于浏览器核心的一些思考
  14. 计算机员工信息登录表的论文,企业员工信息管理系统(论文+程序)
  15. 01【股票初级】-【找准入场时机】投资五大流派,好公司投资法,判断单只股票是否便宜?如何找准时机入场?
  16. 三人表决器与八人抢答器实验
  17. excel转word_pdf转word软件永久jpg图片ppt转换excel编辑器压缩合并拆分去水印,加入自律圈即可获得!!!...
  18. 除了欧拉公式,这8个数学公式也足够美丽且神奇
  19. 宏颜获水: 百度ceo 李彦宏惨槽泼水,懵了!
  20. android系统允许icon角标,安卓手机角标显示方案

热门文章

  1. ANTLR4入门(二):图示说明eclipse Antlr4IDE插件的安装及语法测试过程
  2. 对于小游戏2048代码具体讲解
  3. 解除IE锁定主页批处理
  4. 10G SFP+ CWDM光模块的优势是什么?
  5. latex字体大小调整
  6. 软考高级-考试细节与学习计划篇
  7. 最小安装winpython
  8. 字节跳动之所以成功,是因为管理模式牛逼!
  9. mac安装conda后,终端的用户名前面有一个(base),最佳解决方案
  10. C# Winform GDI+ 绘图