如何在类方法中仅通过索引获取JSON数组字段(无需传数组参数)
问题解决:通过索引ID获取JSON字段值
核心改动思路
给FieldLocator类添加一个私有成员变量存储解析后的地址数组,让所有getXXX方法无需额外传递JSONArray,仅通过索引ID即可直接从成员变量中取值。
修改后的完整代码
package jsonprogram; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.openqa.selenium.WebDriver; public class FieldLocator { public static WebDriver driver; // 新增私有成员变量,存储解析后的地址数组 private JSONArray addressArray; String baseUrl = "https://webapps.tekstac.com/AddressBook/"; public WebDriver createDriver() { driver = DriverSetup.getWebDriver(); driver.get(baseUrl); return driver; } public JSONArray ReadFile(String FileName) throws IOException, ParseException { JSONParser parser = new JSONParser(); FileReader reader = new FileReader(FileName); JSONObject obj = (JSONObject) parser.parse(reader); String cover = (String) obj.get("cover"); System.out.println(cover); // 直接获取Addresses数组并赋值给成员变量,无需额外循环复制 addressArray = (JSONArray) obj.get("Addresses"); System.out.println(addressArray); return addressArray; } public String getNickName(int id) { // 先判断索引合法性,避免数组越界 if (addressArray == null || id < 0 || id >= addressArray.size()) { return null; // 也可根据需求抛出异常 } JSONObject contact = (JSONObject) addressArray.get(id); return (String) contact.get("NickName"); } public String getContactName(int id) { if (addressArray == null || id < 0 || id >= addressArray.size()) { return null; } JSONObject contact = (JSONObject) addressArray.get(id); return (String) contact.get("ContactName"); } public String getCity(int id) { if (addressArray == null || id < 0 || id >= addressArray.size()) { return null; } JSONObject contact = (JSONObject) addressArray.get(id); return (String) contact.get("City"); } public String getType(int id) { if (addressArray == null || id < 0 || id >= addressArray.size()) { return null; } JSONObject contact = (JSONObject) addressArray.get(id); return (String) contact.get("Type"); } public static void main(String[] args) throws IOException, ParseException { FieldLocator fl = new FieldLocator(); String Filename = "D:\\Exercise\\Teksatc\\src\\main\\java\\jsonprogram\\AddressBook.json"; // 调用ReadFile后,数组已存储在成员变量中 fl.ReadFile(Filename); int count = fl.addressArray.size(); System.out.println(count); for (int j = 0; j < count; j++) { String nname = fl.getNickName(j); System.out.println(nname); } } }
关键说明
- 成员变量存储数组:新增
private JSONArray addressArray,在ReadFile方法中直接将解析后的Addresses数组赋值给它,替代原来的局部变量和多余的循环复制。 - 索引合法性检查:每个
getXXX方法先判断数组是否初始化、索引是否在有效范围内,避免数组越界异常。 - 简化取值逻辑:通过
addressArray.get(id)获取对应位置的JSONObject,再调用get("字段名")并转为String类型返回。
原JSON文件内容
{ "cover": "AddressBook", "Addresses": [ { "id":"1", "NickName": "Rahul", "ContactName": "Dravid", "Company":"Cricket", "City":"Indore", "Country":"India", "Type":"Address" }, { "id":"2", "NickName": "Sachin", "ContactName": "Tendulkar", "Company":"Cricket", "City":"Mumbai", "Country":"India", "Type":"Address" } ] }
内容的提问来源于stack exchange,提问作者Gnana sundari P
相关产品推荐
相关产品推荐

