一文让你熟练使用 JSONObject 和 JSONArray

这篇具有很好参考价值的文章主要介绍了一文让你熟练使用 JSONObject 和 JSONArray。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

依赖

导入阿里的 fastjson 依赖。

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

类型转换

String 与 JSON 相互转换

通过 JSONObject.parseObject(String str) 将字符串转换为 JSONObject 对象,此方法支持 JSON 字符串,JSON 字符串格式如下:

写法一:

{
	"code":"1",
	"status":"success",
	"target":"年入百万",
	"msg":{
		"seq":"20230424",
		"weather":"晴",
		"salary":9000.00,
		"job":"摆地摊"
	},
	"goods":{
		"sum":2000.00,
		"manufacturer":{
			"address":"青口",
			"boss":"张三"
		},
		"details":[
			{
				"name":"土豆",
				"weight":"500斤"
			},
			{
				"name":"豆腐",
				"weight":"250斤"
			}
		]
	}
}

写法二:

{"code":"1","status":"success","target":"年入百万","msg":{"seq":"20230424","weather":"晴","salary":9000.00,"job":"摆地摊"},"goods":{"sum":2000.00,"manufacturer":{"address":"青口","boss":"张三"},"details":[{"name":"土豆","weight":"500斤"},{"name":"豆腐","weight":"250斤"}]}}

转换案例代码:

        String JSONstr1 = "{\n" +
                "\t\"code\":\"1\",\n" +
                "\t\"status\":\"success\",\n" +
                "\t\"target\":\"年入百万\",\n" +
                "\t\"msg\":{\n" +
                "\t\t\"seq\":\"20230424\",\n" +
                "\t\t\"weather\":\"晴\",\n" +
                "\t\t\"salary\":9000.00,\n" +
                "\t\t\"job\":\"摆地摊\"\n" +
                "\t},\n" +
                "\t\"goods\":{\n" +
                "\t\t\"sum\":2000.00,\n" +
                "\t\t\"manufacturer\":{\n" +
                "\t\t\t\"address\":\"青口\",\n" +
                "\t\t\t\"boss\":\"张三\"\n" +
                "\t\t},\n" +
                "\t\t\"details\":[\n" +
                "\t\t\t{\n" +
                "\t\t\t\t\"name\":\"土豆\",\n" +
                "\t\t\t\t\"weight\":\"500斤\"\n" +
                "\t\t\t},\n" +
                "\t\t\t{\n" +
                "\t\t\t\t\"name\":\"豆腐\",\n" +
                "\t\t\t\t\"weight\":\"250斤\"\n" +
                "\t\t\t}\n" +
                "\t\t]\n" +
                "\t}\n" +
                "}";
        String JSONstr2 = "{\"code\":\"1\",\"status\":\"success\",\"target\":\"年入百万\",\"msg\":{\"seq\":\"20230424\",\"weather\":\"晴\",\"salary\":9000.00,\"job\":\"摆地摊\"},\"goods\":{\"sum\":2000.00,\"manufacturer\":{\"address\":\"青口\",\"boss\":\"张三\"},\"details\":[{\"name\":\"土豆\",\"weight\":\"500斤\"},{\"name\":\"豆腐\",\"weight\":\"250斤\"}]}}";
        JSONObject jsonObject1 = JSONObject.parseObject(JSONstr1);
        JSONObject jsonObject2 = JSONObject.parseObject(JSONstr2);
        System.out.println(jsonObject1);
        System.out.println(jsonObject2);

输出:
一文让你熟练使用 JSONObject 和 JSONArray


如果是 JSONArray 类型的字符串,如下:

		"details":[
			{
				"name":"土豆",
				"weight":"500斤"
			},
			{
				"name":"豆腐",
				"weight":"250斤"
			}
		]

则需要用 JSONArray.parseArray()


将 JSON 转换为 String,使用 toJSONString() ,如下:

        JSONObject jsonObject = new JSONObject();
        jsonObject.toJSONString();
        JSONObject.toJSONString(jsonObject);

		JSONArray JSONArray = new JSONArray();
        JSONArray.toJSONString();
        JSONArray.toJSONString(JSONArray);

JSON 与 实体类

@Slf4j
public class Test2 {
    public static void main(String[] args) {
        String roleStr = "{\"name\":\"张三\",\"age\":7}";
        Role role = JSONObject.parseObject(roleStr, Role.class);
        log.info(role.toString());
        log.info(role.getName());
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Role {
    private String name;
    private Integer age;

}

一文让你熟练使用 JSONObject 和 JSONArray

JSON 与 Map

        Map<String, Object> map = new HashMap<>();
        map.put("name", "张三");
        map.put("age", 17);
        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(map));

XML 与 Map 相互转换

https://blog.csdn.net/y1534414425/article/details/105770851

增删改查

获取数据

获取 JSONObject 数据:

根据 key 值获取对应的 value 数据。

        // 获取 target 的值,返回 String
        String target = jsonObject2.getString("target");
        // 获取 code 的值,返回 Object
        Object code = jsonObject2.get("code");
        // 获取 msg 的值,返回 JSONObject
        JSONObject msg = jsonObject2.getJSONObject("msg");
        // 获取 details 的值,返回 JSONArray
        JSONArray jsonArray = jsonObject2.getJSONObject("goods").getJSONArray("details");

注意:当要获取的数据不存在于 JSONObject ,获取到的对象为 null,单不会报 NullPointerException,如果继续对此 null 对象获取数据,会报 NullPointerException 。
一文让你熟练使用 JSONObject 和 JSONArray


获取 JSONArray 数据:

根据索引位置返回对象,索引下标从 0 开始。

        // 获取索引为 0 处的 JSON 对象,返回 Object
        Object o = jsonArray.get(0);
        // 获取索引为 0 处的 JSON 对象,返回 JSONObject
        JSONObject jsonObject = jsonArray.getJSONObject(0);

注意:如果要获取的数据不存在于 JSONArray 中,会报空指针。

移除数据

删除 JSONObject 中的数据:

        // 删除指定的 key ,返回被删除的数据 Object
        Object msg1 = jsonObject1.remove("msg");
        // 当 code 的值为 2 的时候才删除,删除成功返回 true,否则返回 false
        boolean code1 = jsonObject1.remove("code", "2");

注意:要移除的元素不在 JSONObject 中,并不会抛出异常。


删除 JSONArray 中的数据:可通过 jsonArray.size() 获取 JSONArray 中的 JSONObject 个数。

        // 移除索引为 0 的 JSONObject
        boolean remove1 = jsonArray.remove("0");
        // 移除指定的 JSONObject
        boolean remove = jsonArray.remove(jsonArray.getJSONObject(0));
        List<JSONObject> jsonObjects = new ArrayList<>();
        for (Object obj : jsonArray) {
            jsonObjects.add((JSONObject) obj);
        }
        // 移除所有 JSONObject
        boolean b = jsonArray.removeAll(jsonObjects);

注意:要移除的元素不在 JSONArray 中,并不会抛出异常。

移除并替换 JSONArray 中的所有数据:

		// detailArr 是 JSONArray
		Map<Integer, JSONObject> map = new HashMap<>();
        int size = detailArr.size();
        for (int i = 0; i < size; i++) {
            JSONObject item = detailArr.getJSONObject(0);
            map.put(i, item);
            detailArr.remove(0);
        }
        for (int i = 0; i < size; i++) {
            detailArr.add(map.get(i));
        }

新增数据

JSONObject 新增数据:

        JSONObject jsonObject = new JSONObject();
        // 插入 key-value ,如果已存在,则覆盖原来的 key 的 value,返回 Object
        Object tip = jsonObject.put("tip", "脱下长衫,摆摊致富");
        Map<String, Object> map = new HashMap<>();
        map.put("name", "大学生");
        map.put("major","通信工程");
        map.put("age", 22);
        // 插入 map
        jsonObject.putAll(map);
        // 插入 key-value ,如果 key 已存在,则插入失败且返回已有的 key-value
        Object tip1 = jsonObject.putIfAbsent("tip", "摆摊摆摊,日赚九千");
        // 将 map 作为 JSONObject 插入
        jsonObject.put("map", map);

JSONArray 新增数据:类似于 JSONObject,不过是 <索引 + Object>,而JSONObject 是 <key-value> 。

一文让你熟练使用 JSONObject 和 JSONArray

注意:JSONArray 给同一索引插入两次 JSONObject ,效果如下:
一文让你熟练使用 JSONObject 和 JSONArray

修改数据

        String str = "{\"code\":\"1\",\"status\":\"success\",\"target\":\"年入百万\",\"msg\":{\"seq\":\"20230424\",\"weather\":\"晴\",\"salary\":9000.00,\"job\":\"摆地摊\"},\"goods\":{\"sum\":2000.00,\"manufacturer\":{\"address\":\"青口\",\"boss\":\"张三\"},\"details\":[{\"name\":\"土豆\",\"weight\":\"500斤\"},{\"name\":\"豆腐\",\"weight\":\"250斤\"}]}}";
        JSONObject jsonObject = JSONObject.parseObject(str);
        // 替换对应 key 的 value
        jsonObject.replace("code", 1);
        JSONObject msg = jsonObject.getJSONObject("msg");
        msg.replace("salary", 10000.00);
        jsonObject.replace("msg", msg);

        // 替换对应 key 的 oldValue 为 newValue,如果 oldValue 不存在,则不替换
        jsonObject.replace("target", "年入十万", "年入千万");

注意:jsonObject 的 put(String key, Object value) 也能达到 replace 的效果。文章来源地址https://www.toymoban.com/news/detail-423996.html

到了这里,关于一文让你熟练使用 JSONObject 和 JSONArray的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [java]JsonObject与JsonArray转换

    备忘一下,首先 这是一个JsonArrayStr,他可以转换为 JsonArray 。 这是一个JsonObjectStr,他可以转换为 JsonObject 。 JsonObject转换为java对象、JsonArray转换为Java对象 JsonObject的value为JsonArray,对应的java类型为List。在案例中,java代码如下(这里用的内部类) 使用fastjson转换jsonStr为java对

    2023年04月21日
    浏览(25)
  • JSONObject与JSONArray的区别和常见转换

    一、JSONObject和JSONArray的数据表现形式 1.JSONObject的数据是用 {  } 来表示的:         例如:{\\\"name\\\":\\\"zhang\\\",\\\"password\\\":\\\"123\\\"} 2.JSONArray,顾名思义是由JSONObject构成的数组,用  [ { } , { } , ......  , { } ]  来表示:         例如:[{\\\"name\\\":\\\"zhang\\\",\\\"password\\\":\\\"123\\\"},{\\\"name\\\":\\\"hang\\\",\\\"password\\\":\\\"45

    2024年02月11日
    浏览(22)
  • JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)

         //1.java对象转化成String      String s=JSONObject.toJSONString(javaObject.class);       //2. java对象转化成Object         Object str=JSONObject.toJSON(javaObject.class);       //3.String类型转json对象        JSONObject jsonObject= JSONObject.parseObject(str);       //4. String转Object         Obj

    2024年02月14日
    浏览(34)
  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 实体类和JSONObject互转 Map和JSONObject互转 String转JSONObject 实体类转JSON字符串时不过滤NULL空值 获取JSONObject中的key value List和

    2024年02月12日
    浏览(46)
  • 一文读懂Springboot如何使用ChatGPT【OpenAI官方Springboot依赖,极强接口封装】

    封装了丰富的OpenAI 接口可直接使用 申请外国虚拟信用卡【Depay】 充值USTD虚拟货币【欧易】 USTD充值到Depay Depay 的USTD 转 USD虚拟货币 将USD货币存入虚拟信用卡 通过虚拟信用卡充值到ChatGPT 优先ChatGPT试用用户 畅享丝滑的响应速度 优先体验新功能 原文 非常感谢你从头到尾阅读

    2024年02月07日
    浏览(27)
  • 一文让你搞懂javascript如何实现继承

    一、本文想给你聊的东西包含一下几个方面:(仅限于es6之前的语法哈,因为es6里面class这用上了。。) 1.原型是啥?原型链是啥? 2.继承的通用概念。 3.Javascript实现继承的方式有哪些?   二、原型是啥?原型链是啥? 1.原型是函数本身的prototype属性。 首先js和java不

    2024年02月04日
    浏览(41)
  • 一文让你轻松拿捏 Spring MVC

    博主介绍 : ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟 💕💕 MVC是一种软件架构模式,它将应用程序分为三个主要组

    2024年02月08日
    浏览(68)
  • Java 阿里的 JSONObject 如何使用

    阿里巴巴的 JSONObject 是一个 Java 类库,用于处理 JSON 数据。它是 Java JSON 工具包 fastjson 的一部分,是一种比较流行的 JSON 序列化和反序列化库,支持 JSON 字符串和 Java 对象之间的相互转换。 在 Java 中使用阿里 JSONObject,需要完成以下步骤: 引入 fastjson 依赖:在项目的 pom.xm

    2024年02月15日
    浏览(34)
  • 一文让你对mysql索引底层实现明明白白

    图片是本人随笔画的,有点粗糙,望大家谅解,如有不妥之处,请联系我们,感谢 .索引是帮助mysql高效获取数据的排好序的数据结构 .索引是存储在文件里的 .数据结构: 二叉树 HASH BTREE       如果没有索引的话,循环一条一条的找,找一次就是一次IO,这样速度就会很慢 我

    2024年01月16日
    浏览(29)
  • 一文让你深入了解JavaSE的知识点

    ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包