在Java中,如何组合两个对象的JSON数组?

2022-09-01 18:19:56

我有几个字符串,每个字符串都包含对象数组的JSON表示形式。下面是一个代码示例来说明,尽管这不是我的实际代码(JSON 字符串已传入):

String s1 = "[{name: "Bob", car: "Ford"},{name: "Mary", car: "Fiat"}]";
String s2 = "[{name: "Mack", car: "VW"},{name: "Steve", car: "Mercedes Benz"}]";

我需要将这两个 JSON 数组组合成一个大型 JSON 数组。我可以将其视为字符串操作问题,并将内端方括号替换为逗号,但这并不是特别可靠(尽管我可以保证获得有效的JSON)。

我宁愿将这两个字符串视为JSON数组,并以某种方式将它们加在一起。这是一个很棒的计划,除了我不知道“以某种方式”的部分。

有没有人知道Java中的解决方案不需要构造JSON对象的Java对象表示形式?

谢谢!


答案 1

此代码将采用 (s2),并将其附加到 (s1) 的末尾:sourceArraydestinationArray

String s1 = "[{name: \"Bob\", car: \"Ford\"},{name: \"Mary\", car: \"Fiat\"}]";
String s2 = "[{name: \"Mack\", car: \"VW\"},{name: \"Steve\", car: \"Mercedes Benz\"}]";

JSONArray sourceArray = new JSONArray(s2);
JSONArray destinationArray = new JSONArray(s1);

for (int i = 0; i < sourceArray.length(); i++) {
    destinationArray.put(sourceArray.getJSONObject(i));
}

String s3 = destinationArray.toString();

答案 2

您实际上只有两个选择:解析 JSON(这总是涉及构造对象)或不解析 JSON。当然,不解析会更便宜。

乍一看,你关于将其视为字符串操作问题的想法可能听起来很脆弱,但我越想越觉得它越有意义。对于错误检测,您可以通过检查方括号轻松确认您确实在处理数组;之后,只需去掉结尾括号,添加一个逗号,去掉开头的括号,再添加“尾巴”,就应该可以完美地工作。我能想到的唯一例外是,如果任何一个数组都是空的,你应该只返回另一个字符串不变;同样,这很容易作为字符串进行检查。

我真的不认为有任何理由让它比这更复杂。