【JSON】JSON解析 fastJson框架

一、JSON

(一)、简介

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。 ​

简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 ​

易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

(二)、语法

1、对象表示为键值对,数据由逗号分隔,花括号保存对象; 方括号保存数组。

2、json数据类型6种

  • 字符串 :"abc", "123" ​
  • 数字 : 1 , 1.21 ​
  • 对象 :{"name" : "张三"} ​
  • 数组 :[1,2,3] ​
  • boolean :true,false ​
  • null :null

3、常用对象:

⚠️{"age":18,"name":"张三","score":100} 和 {"age":"18","name":"张三","score":100}

1)18是int还是字符串,对于json来说是不一样的;

2)顺序不影响 没关系

4、常用数组

[{"name": "张三", "age": 18},{"name": "李四", "age": 16}]

5、类型组合

表示国家对象----一个类,数组里面又包含另一个对象/类——省份{"name": "中国","provinces": [{"name": "黑龙江","capital": "哈尔滨"}, {"name": "广东","capital": "广州"}, {"name": "湖南","capital": "长沙"}]}

二、JSON解析——利用fastJson框架

引入依赖:

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency>

(一)、Java对象与JSON之间的相互转换:

1、序列化:将对象的状态信息转换为可以存储或传输的形式的过程

java对象=> JSON字符串 —— 序列化。 java转成别的就叫序列化

2、反序列化:json字符串转化成java对象

JSON字符串  => java对象—— 反序列化

3、JSON字符串序列化,反序列化,其对应的类有如下要求:

        必须是私有属性,必须是空参构造,必须有get set

(二)、方法

1、字符串 转 对象/map/接口

        ———— JSONObject.parseObject(json字符串,要转的类/接口/map.class)
String json = "{name:\"张三\",age:\"18\"}";
Student s1 = JSONObject.parseObject(json, Student.class);

2、对象/map 转 字符串

        ————JSONObject.toJSONString(对象)

Map<String, String> map = new HashMap<String, String>();
map.put("error", "1");
map.put("msg", "系统错误");
String jsonString = JSONObject.toJSONString(map);

3、字符串数组转成List<类/map...>集合

        ————JSONObject.parseArray(json,你要转的类/map/接口.class)

至于转成类的集合还是map的集合——>比如常用的东西,会建一个类,比如不常用的,可能直接用一个map存储

String jsonAraay = "[{\"name\": \"张三\", \"age\": 18},{\"name\": \"李四\", \"age\": 16}]";转成对象————JSONObject.parseArray(jsonAraay, Student.class)
List<Student> list = JSONObject.parseArray(jsonAraay, Student.class);
//输出 [Student{name='张三', age=18, score=null}, Student{name='李四', age=16, score=null}]
//score=null——因为Student类中有score,但是json列面没有 所以score是null
//student类中的属性和json转换的时候多一个少一个都没有关系,多了就不封装,少了就自己默认转成map————JSONObject.parseArray(jsonAraay, Map.class)
List<Map> maps = JSONObject.parseArray(jsonAraay, Map.class);
System.out.println(maps);//[{name=张三, age=18}, {name=李四, age=16}]

三、json转成map的几种方式

JSON类来解析

  • JSON.parse(str)——JSON类来解析JSON字符串

  • JSON.parseObject(str)——JSON类的parseObject来解析JSON字符串

  • JSON.parseObject(str,Map.class)——JSON类,指定解析类型,来解析JSON字符串

JSONObject是Map接口的一个实现类

  • JSONObject.parse(str)——JSONObject的parseObject方法来解析JSON字符串

  • JSONObject.parseObject(str,Map.class)——JSONObject的parseObject方法并执行返回类型来解析JSON字符串

举例:

public class JsonToMapTest {public static void main(String[] args) {String str = "{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}";//第一种方式Map maps = (Map) JSON.parse(str);System.out.println("这个是用JSON类来解析JSON字符串!!!");for (Object map : maps.entrySet()){System.out.println(((Map.Entry)map).getKey()+"     " + ((Map.Entry)map).getValue());}//第二种方式Map mapTypes = JSON.parseObject(str);System.out.println("这个是用JSON类的parseObject来解析JSON字符串!!!");for (Object obj : mapTypes.keySet()){System.out.println("key为:"+obj+"值为:"+mapTypes.get(obj));}//第三种方式Map mapType = JSON.parseObject(str,Map.class);System.out.println("这个是用JSON类,指定解析类型,来解析JSON字符串!!!");for (Object obj : mapType.keySet()){System.out.println("key为:"+obj+"值为:"+mapType.get(obj));}//第四种方式/*** JSONObject是Map接口的一个实现类*/Map json = (Map) JSONObject.parse(str);System.out.println("这个是用JSONObject类的parse方法来解析JSON字符串!!!");for (Object map : json.entrySet()){System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());}//第五种方式/*** JSONObject是Map接口的一个实现类*/JSONObject jsonObject = JSONObject.parseObject(str);System.out.println("这个是用JSONObject的parseObject方法来解析JSON字符串!!!");for (Object map : json.entrySet()){System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());}//第六种方式/*** JSONObject是Map接口的一个实现类*/Map mapObj = JSONObject.parseObject(str,Map.class);System.out.println("这个是用JSONObject的parseObject方法并执行返回类型来解析JSON字符串!!!");for (Object map: json.entrySet()){System.out.println(((Map.Entry)map).getKey()+"  "+((Map.Entry)map).getValue());}String strArr = "{{\"0\":\"zhangsan\",\"1\":\"lisi\",\"2\":\"wangwu\",\"3\":\"maliu\"}," +"{\"00\":\"zhangsan\",\"11\":\"lisi\",\"22\":\"wangwu\",\"33\":\"maliu\"}}";// JSONArray.parse()System.out.println(json);}
}
//以上所得结果都一样

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL8.0安装教程+使用Navicat远程连接

MySQL8.0安装教程使用Navicat远程连接 版本&#xff1a;MySQL8.0.28 环境&#xff1a;Windows11 1.MySQL下载 进入官网https://www.mysql.com/进行下载&#xff1a; 2.安装MySQL 下载好后&#xff0c;点击运行程序开始安装&#xff0c;安装步骤如下&#xff1a; 以下步骤验…

学习Java的第九天

本章将学习什么是类的无参、带参方法又是什么 一、什么是类的无参方法 类是由一组具有相同属性和共同行为的实体抽象而来。对象执行的操作是通过编写类的方法实现的。显而易见&#xff0c;类的方法是一个功能模块&#xff0c;其作用是“做一件事情”。 1、类的方法必须包括以…

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序

目录 1 -> 排序的概念及其运用 1.1 -> 排序的概念 1.2 -> 常见的排序算法 2 -> 插入排序 2.1 -> 基本思想 2.2 -> 直接插入排序 2.2.1 -> 代码实现 2.3 -> 希尔排序(缩小增量排序) 2.3.1 -> 代码实现 1 -> 排序的概念及其运用 1.1 -&g…

React改变数据【案例】

State传统方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!--…

linuxOPS基础_vmware虚拟机安装及介绍

虚拟机概念 什么是虚拟机&#xff1f; 虚拟机&#xff0c;有些时候想模拟出一个真实的电脑环境&#xff0c;碍于使用真机安装代价太大&#xff0c;因此而诞生的一款可以模拟操作系统运行的软件。 虚拟机目前有2 个比较有名的产品&#xff1a;vmware 出品的vmware workstatio…

Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

1.简介 上一篇中已经将其的理论知识介绍了一下&#xff0c;这一篇就带着大家一步一步的把上一篇介绍的理论知识实践一下&#xff0c;然后再说一下如何创建高级web测试计划。 2.网络计划实战 通过上一篇的学习&#xff0c;将其分类为&#xff1a; &#xff08;1&#xff09;不需…

蓝桥杯真题讲解:三国游戏(贪心)

蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 二、正解代码 //三国游戏&#xff1a;贪心 #include<bits/stdc.h> #define int long lon…

Springboot applicaton.yml logging output

debug model will show the SQL running process

1688中国站获得实力档案信息 API 返回值说明

公共参数 名称类型必须描述keyString是申请免费调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认y…

物体检测-系列教程27:YOLOV5 源码解析17(训练脚本解读:训练函数4)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 24、epoch循环训练------更新、评估、保存 这部分是训练过程的每个epoch结束之前执行的一…

同城即配年度观察:顺丰同城率先全年盈利,行业破局迎参考

即时消费趋势增强&#xff0c;“万物到家即时可得”成为了消费新常态。这创造出不可忽视的场景潜力&#xff0c;也在无形中让龙头企业的发展质量走到突破点。 3月11日晚&#xff0c;“第三方即时配送第一股”顺丰同城发布公告称&#xff0c;预期实现2023年全年盈利&#xff0c…

Python的os模块,必学干货!

1.os模块作用 主要是用来完成对文件或者文件夹的操作 2.导入os模块 import os 3.listdir() 查看指定目录下面所有的文件或者文件夹 print(os.listdir(r"D:\PycharmProjects\pythonProject")) # [.idea, 01_语法, 02_函数, 03_类型转换, 04_运算符, 05_分支结…

深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理

文章目录 一、引言二、关联式容器的中的 paira.pair 的创建及使用b.pair 间的比较 三、 map 与 set 详解1. map 的基本操作2. set 的基本操作3.关联式容器的迭代器 四、 multimap 与 multiset 的特性五、关联式容器的使用技巧与注意事项1. 键值类型的选择与设计2. 自定义比较函…

Python基础学习(4)散列类型(无序序列)

文章目录 一,认识集合1.定义2.运算 二.集合方法1.删2.增 三.认识字典1.字典(dict)2.特性3.字典方法①查②改③增④删 四.声明空变量 Python基础学习(1)基本知识 Python基础学习(2)序列类型方法与数据类型转换 Python基础学习(3)进阶字符串(格式化输出) Python基础学习(4)散列类…

专题1 - 双指针 - leetcode 15. 三数之和 - 中等难度

leetcode 15. 三数之和 - 点击直达 leetcode 15. 三数之和 中等难度 双指针1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 15. 三数之和 中等难度 双指针 1. 题目详情 给你一个整数数组 nums &#…

通过xlsx库解析读取excel表格内容

一、使用 有时项目中有需要前端自己将本地的excel文件导入并获取内部数据&#xff0c;最终处理数据&#xff08;批量导入等场景&#xff09; 这时我们就可以用到一个库&#xff08;xlsx&#xff09;来读取excel中的内容&#xff0c;然后通过其API能力将数据转换成json格式 具…

Pytorch实战01——CIAR10数据集

目录 1、model.py文件 &#xff08;预训练的模型&#xff09; 2、train.py文件&#xff08;会产生训练好的.th文件&#xff09; 3、predict.py文件&#xff08;预测文件&#xff09; 4、结果展示&#xff1a; 1、model.py文件 &#xff08;预训练的模型&#xff09; impor…

吴恩达机器学习笔记 十七 通过偏差与方差诊断性能 正则化 偏差 方差

高偏差&#xff08;欠拟合&#xff09;&#xff1a;在训练集上表现得也不好 高方差&#xff08;过拟合&#xff09;&#xff1a;J_cv要远大于J_train 刚刚好&#xff1a;J_cv和J_train都小 J_cv和J_train与拟合多项式阶数的关系 从一阶到四阶&#xff0c;训练集的误差越来越小…

力扣串题:验证回文串2

整体思路&#xff1a;先找到可能存在问题的点&#xff0c;然后判断&#xff0c;如果一切正常则左指针会来到字符串中部 bool isValidPalindrome(char *s, int i, int j) {while (i < j) {if (s[i] ! s[j]) {return false;}i;j--;}return true; }bool validPalindrome(char …

禁用文本框输入中文,禁用中文输入法的ImeMode方法

之前遇到一个问题&#xff0c;在文本框切换输入法为中文后&#xff0c;使用扫码枪扫码时 会出现 比如条码NH123456 在文本框内会显示 你好23456 这里可以使用输入法编辑器ImeMode枚举属性 如果文本框只能输入英文数字&#xff0c;可以使用ImeMode.Disable&#xff0c;但默…