You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在类方法中仅通过索引获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:21:03