
本文详解如何使用 org.json 库将多个 json 对象封装进名为 "pays" 的数组中,最终生成符合要求的嵌套 json 结构。
本文详解如何使用 org.json 库将多个 json 对象封装进名为 "pays" 的数组中,最终生成符合要求的嵌套 json 结构。
在实际开发中,尤其是对接 RESTful API 或模拟测试数据时,常需构造形如 { "pays": [ {...}, {...} ] } 的嵌套 JSON。原始代码仅构建了一个扁平的 JSONObject,而目标结构要求顶层键为 "pays",其值是一个 JSONArray,数组内包含若干具有相同字段(lastName、firstName、phoneNumber、amount)的 JSON 对象。
要实现该结构,核心步骤有三:
- 逐个创建内部对象:为每个“支付项”独立构建 JSONObject;
- 收集到 JSONArray 中:使用 JSONArray.put() 将对象添加进数组;
- 封装进顶层对象:新建一个 JSONObject,以 "pays" 为键,将前述数组设为其值。
以下是完整、可复用的示例代码(支持生成多个随机条目):
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
import org.json.JSONArray;
import org.json.JSONObject;
import com.github.javafaker.Faker;
public JSONObject buildPaysJson(int count) {
JSONArray paysArray = new JSONArray();
Faker faker = new Faker();
for (int i = 0; i < count; i++) {
JSONObject item = new JSONObject();
item.put("lastName", faker.name().lastName());
item.put("firstName", faker.name().firstName());
item.put("phoneNumber", faker.phoneNumber().cellPhone()); // 推荐使用 cellPhone() 获取纯数字字符串
item.put("amount", 1000 + i); // 示例:金额递增避免重复
paysArray.put(item);
}
JSONObject root = new JSONObject();
root.put("pays", paysArray);
return root;
}⚠️ 注意事项:
- faker.phoneNumber() 默认返回带空格/括号的格式(如 "(123) 456-7890"),若后端要求纯数字,请改用 faker.phoneNumber().cellPhone() 或正则清洗;
- JSONArray.put() 可接受 JSONObject、String、Number 等类型,但需确保字段值类型与 API 文档一致(例如 phoneNumber 若定义为数字类型,需确保字符串可安全解析为 long);
- 若需生成固定内容用于单元测试,可直接 new JSONObject 并手动 put,无需 Faker。
最终输出示例(格式化后):
{
"pays": [
{
"lastName": "Schmidt",
"firstName": "Elena",
"phoneNumber": "9170067401",
"amount": 1000
},
{
"lastName": "Nguyen",
"firstName": "Jasper",
"phoneNumber": "4325454555",
"amount": 1001
}
]
}掌握这一模式后,即可灵活扩展——例如添加 "currency" 字段、嵌套 "address" 对象,或动态控制数组长度,满足各类接口契约需求。

















