从Java中的JSONArray集合中提取键值对并合并为一个JSONArray

从java中的jsonarray集合中提取键值对并合并为一个jsonarray

本文将详细介绍如何使用Java代码将两个JSONArray中的数据进行合并,并生成一个新的JSONArray。假设我们有两个JSONArray,它们之间通过一个公共的键(例如 “id”)相关联。我们的目标是根据这个关联键,将两个JSONArray中的JSONObject进行合并,最终得到一个包含合并后的键值对的新JSONArray。

首先,我们需要明确JSONArray和JSONObject的概念。JSONArray可以看作是一个JSONObject的数组,而JSONObject则是一个键值对的集合。

实现步骤

准备数据: 首先,你需要准备好两个JSONArray。假设第一个JSONArray包含 “name” 和 “id” 字段,第二个JSONArray包含 “color”、”id” 和 “country” 字段。

立即学习“Java免费学习笔记(深入)”;

import org.json.JSONArray;import org.json.JSONObject;public class JSONArrayMerger {    public static void main(String[] args) {        JSONArray array1 = new JSONArray();        array1.put(new JSONObject().put("name", "John").put("id", "1"));        array1.put(new JSONObject().put("name", "Adam").put("id", "2"));        JSONArray array2 = new JSONArray();        array2.put(new JSONObject().put("color", "red").put("id", "1").put("country", "Poland"));        array2.put(new JSONObject().put("color", "green").put("id", "2").put("country", "Germany"));        array2.put(new JSONObject().put("color", "red").put("id", "3").put("country", "England"));        JSONArray mergedArray = mergeJSONArrays(new JSONArray[]{array1, array2}, "id");        System.out.println(mergedArray.toString(2)); // 使用toString(2)格式化输出,方便阅读    }

创建合并方法: 创建一个方法,该方法接收两个JSONArray和一个关联键作为参数。该方法将返回合并后的JSONArray。

    public static JSONArray mergeJSONArrays(JSONArray[] arraysToMerge, String key) {        Map merged = new HashMap();        for (JSONArray array : arraysToMerge) {            for (int i = 0; i  {                            obj.remove(key);                            return obj;                        });                        for (String name : JSONObject.getNames(obj)) {                            if (!name.equals(key)) {                                try {                                    existingObj.put(name, obj.get(name));                                } catch (JSONException e) {                                    // 处理JSONException,例如打印错误信息                                    e.printStackTrace();                                }                            }                        }                    }                }            }        }        return new JSONArray(merged.values());    }

遍历JSONArray并合并JSONObject: 在合并方法中,首先创建一个 HashMap 用于存储合并后的JSONObject。键是关联键的值,值是合并后的JSONObject。然后,遍历每个JSONArray,对于每个JSONObject,提取关联键的值。如果该值已经存在于 HashMap 中,则将当前JSONObject的键值对添加到已存在的JSONObject中。否则,创建一个新的JSONObject,并将当前JSONObject的键值对添加到新的JSONObject中,并将新的JSONObject添加到 HashMap 中。

创建新的JSONArray: 最后,将 HashMap 中的所有JSONObject转换为JSONArray,并返回该JSONArray。

完整代码示例

import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONException;import java.util.HashMap;import java.util.Map;public class JSONArrayMerger {    public static void main(String[] args) {        JSONArray array1 = new JSONArray();        try {            array1.put(new JSONObject().put("name", "John").put("id", "1"));            array1.put(new JSONObject().put("name", "Adam").put("id", "2"));            JSONArray array2 = new JSONArray();            array2.put(new JSONObject().put("color", "red").put("id", "1").put("country", "Poland"));            array2.put(new JSONObject().put("color", "green").put("id", "2").put("country", "Germany"));            array2.put(new JSONObject().put("color", "red").put("id", "3").put("country", "England"));            JSONArray mergedArray = mergeJSONArrays(new JSONArray[]{array1, array2}, "id");            System.out.println(mergedArray.toString(2)); // 使用toString(2)格式化输出,方便阅读        } catch (JSONException e) {            e.printStackTrace();        }    }    public static JSONArray mergeJSONArrays(JSONArray[] arraysToMerge, String key) {        Map merged = new HashMap();        for (JSONArray array : arraysToMerge) {            for (int i = 0; i  {                            obj.remove(key);                            return obj;                        });                        for (String name : JSONObject.getNames(obj)) {                            if (!name.equals(key)) {                                try {                                    existingObj.put(name, obj.get(name));                                } catch (JSONException e) {                                    // 处理JSONException,例如打印错误信息                                    e.printStackTrace();                                }                            }                        }                    }                }            }        }        return new JSONArray(merged.values());    }}

注意事项

JSON库: 该代码示例使用了 org.json 库。你需要确保你的项目中包含了该库。你可以通过Maven或Gradle等构建工具添加依赖。键冲突: 如果两个JSONArray中存在相同的键,那么后一个JSONArray中的值将覆盖前一个JSONArray中的值。 如果需要更复杂的冲突处理逻辑,你需要在代码中添加相应的逻辑。异常处理: 在实际应用中,你需要添加适当的异常处理代码,例如处理 JSONException。

总结

本文介绍了如何使用Java代码将两个JSONArray中的数据进行合并,并生成一个新的JSONArray。通过使用 HashMap 数据结构,可以方便地根据关联键将JSONObject进行合并。该方法可以应用于各种需要合并JSONArray数据的场景。请根据你的实际需求,修改和扩展该代码示例。

以上就是从Java中的JSONArray集合中提取键值对并合并为一个JSONArray的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/93756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月19日 07:43:48
下一篇 2025年11月19日 08:05:14

相关推荐

  • 解决Windows升级后XAMPP无法工作及数据备份问题

    本文旨在提供一套完整的解决方案,帮助用户在Windows系统升级后恢复XAMPP服务器,并安全地备份旧项目数据。文章将详细讲解如何导出数据库、备份网站文件、安装新版XAMPP、调整PHP设置以及恢复网站文件和数据库,避免常见的“Table already exists”错误,确保项目数据完整迁移。 …

    2025年12月12日
    000
  • PHP While 循环异常终止:问题诊断与解决方案

    本文旨在解决PHP中使用while循环从MySQL数据库获取数据时,循环只执行一次就停止的问题。通过分析错误信息和代码逻辑,我们将定位问题根源在于变量名冲突,并提供明确的修改方案,确保循环能够正确处理所有数据行。本文还将介绍如何避免类似错误,提升代码的健壮性和可维护性。 在PHP开发中,使用whil…

    2025年12月12日
    000
  • XAMPP升级Windows后无法启动及项目数据恢复指南

    摘要:本文旨在解决Windows系统升级后XAMPP服务器无法正常启动,以及如何备份和恢复旧项目数据的难题。我们将详细介绍如何导出数据库、备份网站文件、安装新版XAMPP、调整PHP设置,以及恢复网站文件和数据库,确保项目数据安全迁移。同时,提供数据库导出和导入的注意事项,避免常见的”T…

    2025年12月12日
    000
  • XAMPP服务器在Windows系统升级后的数据迁移与恢复实战指南

    本文旨在提供XAMPP服务器在Windows系统升级后进行项目数据迁移与恢复的专业指南。核心内容强调,仅复制XAMPP文件夹或htdocs、ibdata1文件不足以完成数据库迁移,必须通过导出和导入数据库的方式来确保数据完整性,并详细阐述了包含数据库备份、文件恢复及常见错误解决方案在内的六步完整迁移…

    2025年12月12日
    000
  • PHP/Laravel:高效更新嵌套集合并填充缺失数据点

    本教程详细介绍了如何在PHP/Laravel环境中,基于一个包含完整结构的数据集合,更新另一个嵌套集合中的值,并对缺失的键值对填充默认值0。通过利用PHP的引用机制,本方法实现了高效且内存友好的数据合并与转换,适用于处理复杂的数据同步场景,确保数据结构的完整性与准确性。 场景描述与问题分析 在数据处…

    2025年12月12日
    000
  • 如何重构PHP函数:消除Switch语句与优化验证逻辑

    本文将深入探讨如何对一个包含复杂条件逻辑和switch语句的PHP函数进行重构,以提升其可读性、可维护性,并使其更好地遵循SOLID原则。我们将重点介绍如何利用数据结构替代switch语句,应用卫语句(Early Return)简化控制流,并优化参数验证与信息输出的职责划分,从而构建更清晰、更专业的…

    2025年12月12日
    000
  • 代码重构:优化复杂函数与消除Switch语句

    本文旨在探讨如何通过应用SOLID原则和清洁代码实践,对包含复杂条件逻辑和switch语句的函数进行重构。我们将重点介绍如何利用提前返回、数据映射以及单一职责原则来简化代码结构、提高可读性与可维护性,从而消除冗余的switch语句,并使函数职责更加清晰。 优化复杂函数的策略与实践 在软件开发中,我们…

    2025年12月12日
    000
  • PHP函数重构实践:优化条件逻辑与提升可维护性

    本文探讨如何重构包含复杂条件逻辑(特别是switch语句)的PHP函数,通过引入数据映射、采用卫语句(Early Return)以及明确职责分离等方法,消除代码冗余,提升可读性和可维护性。我们将通过一个具体的饮品订单处理函数为例,演示如何将一个庞大的函数拆解为更清晰、更符合SOLID原则的模块,从而…

    2025年12月12日
    000
  • PHP函数重构:优化复杂逻辑与消除Switch语句的实践

    本文旨在指导如何通过应用SOLID原则和清洁代码实践,对包含复杂条件判断和switch语句的PHP函数进行重构。我们将重点探讨如何利用提前返回机制提升代码可读性,以及如何使用数据映射(Data Map)模式优雅地替代冗余的switch结构,从而提高代码的可维护性和扩展性。通过具体的代码示例,展示如何…

    2025年12月12日
    000
  • PHP 二叉树递归遍历中的无限循环问题排查与修复

    本文旨在解决 PHP 中二叉树递归遍历时出现的无限循环问题,并提供修复方案。通过分析问题代码,指出 __constructor 拼写错误、内部函数使用不当、缺少 $this 引用等常见错误,并提供修正后的代码示例,帮助开发者避免类似问题,实现正确的二叉树遍历。 在 PHP 中实现二叉树的递归遍历,需…

    2025年12月12日
    000
  • PHP二叉树实现与常见陷阱:构建、遍历及优化实践

    本文深入探讨了PHP中二叉搜索树的构建与三种核心遍历(前序、中序、后序)的实现。文章通过分析常见编程错误,如构造函数拼写、函数作用域、$this引用、数组输出以及递归参数传递等,提供了一套健壮且符合PHP最佳实践的解决方案,旨在帮助开发者避免陷阱,高效地构建和操作二叉树数据结构。 1. 核心概念:节…

    2025年12月12日
    000
  • PHP 清空目录,包括自身脚本

    本文将介绍如何使用 PHP 编写脚本,用于删除指定目录下的所有文件,包括该脚本自身。 清空目录的 PHP 脚本实现 要实现清空目录的功能,我们需要以下几个步骤: 获取目录下的所有文件: 使用 glob() 函数获取目录下所有文件的路径。删除文件: 使用 unlink() 函数删除每个文件。删除脚本自…

    2025年12月12日
    000
  • Laravel 7 artisan key:generate 命令失效问题解决

    本文旨在解决 Laravel 7 项目中使用 php artisan key:generate 命令生成 APP_KEY 时遇到的 “file_get_contents” 错误。通过手动生成 APP_KEY 并更新 .env 文件,可以有效绕过该问题,确保应用程序正常运行。 …

    2025年12月12日
    000
  • Laravel Artisan Key Generate 失败问题解决指南

    第一段引用上面的摘要:本文旨在解决 Laravel 7 中执行 php artisan key:generate 命令时遇到的 “file_get_contents” 错误。通过手动生成 APP_KEY 并更新 .env 文件,帮助开发者快速解决该问题,确保应用程序正常运行。…

    2025年12月12日
    000
  • Laravel 7 artisan key:generate 报错解决方案

    第一段引用上面的摘要: 本文针对 Laravel 7 中执行 php artisan key:generate 命令时出现 “file_get_contents(/project/positiv/core/vendor/psy//.env): failed to open stream:…

    2025年12月12日
    000
  • Laravel 7 artisan key:generate 报错问题解决指南

    本文旨在解决 Laravel 7 项目中使用 php artisan key:generate 命令生成 APP_KEY 时遇到的 “file_get_contents(/project/positiv/core/vendor/psy//.env): failed to open str…

    2025年12月12日
    000
  • Laravel 路由定义冲突:Route Not Defined 错误排查与解决

    本文旨在帮助开发者解决 Laravel 项目中遇到的 “Route [xxx] not defined” 错误,尤其是在定义多个具有相同 URL 的 POST 路由时。通过分析问题原因,提供明确的解决方案,并给出最佳实践建议,确保路由配置的正确性和应用的稳定性。 在 Lara…

    2025年12月12日
    000
  • Laravel 多对多关系中高效查询共享分类的文章

    在构建现代Web应用时,多对多关系是常见的数据模型之一。例如,一篇文章可以属于多个分类,而一个分类下也可以包含多篇文章。在这种场景下,一个常见的需求是:给定一篇文章,如何高效地找出所有与其共享至少一个分类的其他文章? 为了更好地理解这一需求,我们假设存在以下数据库表结构和eloquent模型定义: …

    2025年12月12日
    000
  • Laravel 多对多关系中高效查询共享类别文章的策略

    本文深入探讨了在 Laravel 多对多关系中,如何高效地查询与给定文章共享所有类别的其他文章。通过分析传统多步查询的局限性,文章详细介绍了使用 Laravel Eloquent 的 whereHas 方法及其嵌套关系查询能力,展示了如何通过单次数据库查询实现复杂业务逻辑,并提供了代码示例及生成的 …

    2025年12月12日
    000
  • 如何在 Laravel 中验证嵌套数组中的邮箱和角色ID

    本文详细介绍了在 Laravel 应用程序中如何高效地验证包含嵌套数据的数组,特别是针对数组中每个元素的邮箱地址和角色ID。通过使用 Laravel 强大的表单请求(Form Request)或控制器验证方法,结合点式表示法和通配符,您可以轻松实现对复杂数据结构的准确验证,确保数据的完整性和安全性。…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信