FastJson中JSONObject用法及常用方法总结

2023-11-14

–人无远虑,必有近忧–

1.什么是FastJson、JSONObject?

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

JSONObject是一种数据结构,可以理解为JSON格式的数据结构,即“key-value”结构,其格式为“{“key1”:value1,“key2”,value2…}”;JSONObject添加元素可以使用put和get方法。

2.JSONObject它是干嘛的?

JsonObject 就是常说的 json。是一种重要的数据传输对象。

因为ajax请求不刷新页面,但配合js可以实现局部刷新,因此json常常被用来作为异步请求的返回对象使用。

通过response.getWriter()获取PrintWriter pw,然后pw.print(json)。如果没有设置response.setContentType(“application/json; charset=utf-8”); 则需要自己再js中进行解析。

JSONObject添加元素可以使用put(key,value)方法和调用元素方法get(key),这两种方法大家可以任选一种,另外JsonObject是一种重要的数据传输对象,是实际工作中是必不可少的。

3.JSONObject该如何学习

1.导包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.1</version>
</dependency>

2.常用方法Api

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.crazyit.app.test.TestStudent;
import org.junit.jupiter.api.Test;

import java.util.Map;
import java.util.Set;

public class TestJsonObjet {
    @Test
    public void testJsonObjet(){
        //新建JSONObject对象
        JSONObject object1 = new JSONObject();

        //1.在JSONObject对象中放入键值对
        object1.put("name", "张三");
        object1.put("name1", "张三1");
        object1.put("name2", "张三2");

        //2.根据key获取value
        String name = (String) object1.get("name");
        System.out.println(name);

        //3.获取JSONObject中的键值对个数
        int size = object1.size();
        System.out.println(size);

        //4.判断是否为空
        boolean result = object1.isEmpty();
        System.out.println(result);

        //5.是否包含对应的key值,包含返回true,不包含返回false
        boolean isContainsKeyResult = object1.containsKey("name");
        System.out.println(isContainsKeyResult);

        //6.是否包含对应的value值,包含返回true,不包含返回false
        boolean isContainsValueResult = object1.containsValue("王五");
        System.out.println(isContainsValueResult);

        //7.JSONObjct对象中的value是一个JSONObject对象,即根据key获取对应的JSONObject对象;
        JSONObject object2 = new JSONObject();
        //将jsonobject对象作为value进行设置
        object2.put("student1", object1);
        JSONObject student =object2.getJSONObject("student1");
        System.out.println(student);

        //8.如果JSONObject对象中的value是一个JSONObject数组,既根据key获取对应的JSONObject数组;
        JSONObject objectArray = new JSONObject();
        //创建JSONArray数组
        JSONArray jsonArray = new JSONArray();
        //在JSONArray数组设值:jsonArray.add(int index, Object value);
        jsonArray.add(0, "this is a jsonArray value");
        jsonArray.add(1, "another jsonArray value");
        objectArray.put("testArray", jsonArray);
        //获取JSONObject对象中的JSONArray数组
        JSONArray jsonArray2 = objectArray.getJSONArray("testArray");
        System.out.println(jsonArray2);

        //9.remove.根据key移除JSONObject对象中的某个键值对
        object1.remove("name");
        System.out.println(object1);

        //10.取得JSONObject对象中key的集合
        Set<String> keySet= object1.keySet();
        for (String key : keySet) {
            System.out.print("   "+key);
        }
        System.out.println();

        //11.取得JSONObject对象中的键和值的映射关系
        Set<Map.Entry<String, Object>> entrySet = object1.entrySet();
        for (Map.Entry<String, Object> entry : entrySet) {
            System.out.println(entry);
        }


        //12.转换为json字符串
        String str1 = object1.toJSONString();
        System.out.println(str1);
        String str2 =object1.toString();
        System.out.println(str2);

        //13.将JSONObject转换成对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","张三");
        jsonObject.put("age","12");
        String JSONStr = JSON.toJSONString(jsonObject);
        TestStudent testStudent = JSON.parseObject(JSONStr, TestStudent.class);
        System.out.println(testStudent);
    }
}

TestStudent 实体类

package org.crazyit.app.test;

import lombok.Data;

@Data
public class TestStudent {
    private String name;
    private String age;

    @Override
    public String toString() {
        return "TestStudent{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

输出结果:

com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 TestJsonObjet,testJsonObjet

张三
3
false
true
false
{"name":"张三","name2":"张三2","name1":"张三1"}
["this is a jsonArray value","another jsonArray value"]
{"name2":"张三2","name1":"张三1"}
   name2   name1
name2=张三2
name1=张三1
{"name2":"张三2","name1":"张三1"}
{"name2":"张三2","name1":"张三1"}
TestStudent{name='张三', age='12'}


Process finished with exit code 0

4.删除key和获取key的返回值部分对比

删除key不用考虑key是否存在,有就删除,没有不会报错,获取key没有的时候会返回null

import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;

public class TestJsonObjet1 {
    @Test
    public void testJsonObjet(){
        //新建JSONObject对象
        JSONObject object1 = new JSONObject();

        //1.在JSONObject对象中放入键值对
        object1.put("name", "张三");
        object1.put("name1", "张三1");
        object1.put("name2", "张三2");

        // 成功删除存在的key,返回key对应的value
        Object name = object1.remove("name");
        // 通过key,value删除,返回结果是bollean
        boolean remove = object1.remove("name1", "张三3");
        // 删除一个不存在的key返回结果是null
        Object na3123me = object1.remove("na3123me");

        System.out.println(name);
        System.out.println(remove);
        System.out.println(na3123me);

        String string = object1.getString("3123");
        Object o = object1.get("3123");
        int intValue = object1.getIntValue("3123");
        BigDecimal bigDecimal = object1.getBigDecimal("3123");
        System.out.println(string);
        System.out.println(o);
        System.out.println(intValue);
        System.out.println(bigDecimal);
        System.out.println(object1);

    }
}

输出结果:

张三
false
null
null
null
0
null
{"name2":"张三2","name1":"张三1"}


Process finished with exit code 0

5.对JSONObject的key和value(数字、字符串)进行封装为字符串

//新建JSONObject对象
        JSONObject object1 = new JSONObject();

        //1.在JSONObject对象中放入键值对
        object1.put("name", "张三");
        object1.put("name1", "张三1");
        object1.put("name2", "张三2");
        object1.put("age", 12);
        object1.put("money", 1200.00);

        Map<String, String> map = new HashMap<>();
        Iterator<Map.Entry<String, Object>> iterator = object1.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<String, Object> object = iterator.next();
            // 强制转换,会类型转换异常java.lang.ClassCastException
//            map.put(object.getKey(), (String) object.getValue());
            map.put(object.getKey(),  object.getValue()+"");
        }
        System.out.println(map);

结果:

{money=1200.01, name=张三, name2=张三2, name1=张三1, age=12}

Iterator<Entry<String,String>> iter=map.entrySet().iterator(); 是什么意思

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastJson中JSONObject用法及常用方法总结 的相关文章

  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • 按值对 JSON 进行排序

    我有一个非常简单的 JSON 对象 如下所示 people f name john l name doe sequence 0 title president url google com color 333333 f name micha
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 如何使用 Retrofit 解析嵌套 json....?

    我不知道该怎么办使用 Retrofit 解析 json 熟悉使用 Retrofit 解析简单的 json 但不熟悉解析嵌套Json using Retrofit 这是我的 Json 数据 current observation image
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id

随机推荐

  • 在MacOS下使用Fiddler抓包

    在MacOS下使用Fiddler抓包 在MacOS下使用Fiddler抓包 有两种方式 分别是安装Mac版的Fiddler 或者是用虚拟机 安装Windows系统 在Windows系统下运行Fiddler对Mac系统中的内容进行抓包 Mac
  • AES128加密算法的实现(C/Java/C#)

    最近项目中有一个需求 实现AES128的加密算法 用于硬件和平台的通信 硬件加密部分使用C语言完成 平台有两种不同的环境 java Linux 和C Windows 在网上搜集了一些资料 有人实现过纯C代码的AES加密解密算法 这样实际上有
  • Java 新特性 UpdateWrapper-(修改指定字段)

    UpdateWrapper的使用 UpdateWrapper的使用 修改指定id的名字 可在后增加条件 常用的连接条件 UpdateWrapper的使用 QueryWrapperLambdaQueryWrapper 条件查询 修改指定id的
  • 在 WebStorm 中开发 uni-app

    代码已上传至github github代码地址 https github com Miofly mio git CLI 工程 全局安装 vue cli 3 x 如已安装请跳过此步骤 npm install g vue cli 通过 CLI
  • JavaScript 常见鼠标事件

    常见鼠标事件类型1 1 click鼠标左键点击 2 mousedown 鼠标按下时触发 3 mouseup 鼠标弹起时触发 4 mousemove move移动 鼠标在固定的位置一移动就触发移动 就触发 5 mouseenter 鼠标移入触
  • Qt 识别 DM 码

    Qt 识别 DM 码 下载libdmtx 添加源码到Qt 工程 生成一维码 二维码 识别普通二维码网上库很多 这个库专门识别 DM码 下载libdmtx https github com dmtx libdmtx 添加源码到Qt 工程 li
  • 前程无忧guid、acw_sc__v2

    文章目录 声明 目标网站 acw sc v2分析 python调用测试 话外拓展 风控浅析 往期逆向文章推荐 声明 本文章中所有内容仅供学习交流 严禁用于商业用途和非法用途 否则由此产生的一切后果均与作者无关 若有侵权 请私信我立即删除 目
  • 新型智能优化算法——海鸥优化算法(基于Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 2019 年 Dhiman G等人提出了一种受自然界海鸥启发的新颖全局优化算法 海鸥优化算法 Seagull Optimization Algorithm SOA
  • 攻防世界RE练习

    攻防世界 一开始学习下re 产生了兴趣 game 这个题目在某个CTF平台做过了0 0 再做一遍 跟着WP 0 0 首先用ExeinfoPe或者Peid查壳 也可以使用file命令查看相关信息 32位程序 使用ida打开 F5反编译 程序逻
  • Blender基础操作:面操作细分、整体切分、挤出、内插、尖分、融并、切割、面的法向、填充等

    目录 1 面操作 进入 面选择 模式 选择一个面 2 面的挤出 3 内插面 4 尖分面 5 面的切割 6 面的法向normal 7 填充面 8 X Ray透视 1 面操作 进入 面选择 模式 选择一个面 4种操作手段 菜单 工具 右键菜单
  • WireShark_过滤语法

    WireShark 过滤语法 过滤IP 如来源IP或者目标IP等于某个IP 例子 ip src eq 192 168 1 107 or ip dst eq 192 168 1 107 或者 ip addr eq 192 168 1 107
  • python网络爬虫--selenium(6)--练习

    一 打开网页获取页面源码 from selenium webdriver chrome import webdriver 初始化 需要加载浏览器驱动 driver webdriver WebDriver executable path ch
  • 为解决cpu与主存的速度匹配可采用什么

    为解决cpu与主存的速度匹配可采用cache存储器 cache存储器是位于cpu和主存储器DRAM之间 规模较小 但速度很高的存储器 通常由静态存储器组成 静态存储器是位于cpu与内存间的一种容量较小但速度很高的存储器 为解决CPU和主存的
  • 计算机中丢失msvcp120.dll是什么意思,电脑提示msvcp120.dll丢失怎么办

    一些朋友在使用电脑的过程中 可能会遇到 msvcp120 dll丢失 的情况 那电脑提示msvcp120 dll丢失怎么办呢 碰到了这种情况不用慌 下面和大家分享电脑提示msvcp120 dll丢失解决方法 电脑提示msvcp120 dll
  • 完整教程:设计一款小巧但强大的传感器

    由IEEE制定的新型单对以太网 SPE 或10BASE T1L物理层标准 为传输设备运行状况信息实施状态监测 CbM 应用提供了新的连接解决方案 SPE提供共享电源和高带宽数据架构 可通过低成本双线电缆在超过1000米的距离实现10 Mbp
  • 实时汇率获取 解决跨域以及循环Ajax请求

    前端框架 ExtJs 币种代码 var currencys curCode USD curCode CNY curCode HKD setInterval function for var idx 0 len currencys lengt
  • Java 单链表

    package com abin lee tree test import com abin des algorithm common json jackson JsonUtil import java util concurrent at
  • vue动态表单封装

    需求 根据传参动态生成表单 例如搜索表格的表单 1 组件封装
  • Java--concurrent并发包下阻塞队列介绍

    JDK提供了7中阻塞队列 这里介绍其中3中 剩余的以此类推原理相同 1 ArrayBlockingQueue package com seeyon queue import java util concurrent ArrayBlockin
  • FastJson中JSONObject用法及常用方法总结

    人无远虑 必有近忧 1 什么是FastJson JSONObject fastjson是阿里巴巴的开源JSON解析库 它可以解析JSON格式的字符串 支持将Java Bean序列化为JSON字符串 也可以从JSON字符串反序列化到JavaB