繁体   English   中英

JSONObject 中的嵌套数组返回为空(org.json)

[英]Nested array in JSONObject is returning as empty (org.json)

我从 JSON 文件中得到一个嵌套的 JSON 数组(“投资”),但是当我尝试使用它时,该数组似乎是空的。

我的 JSON 文件:

    {
"invested": [
    {
        "email" : "test@test.com",
        "password" : "test"
    }
],
"notInvested": [
    {
        "email" : "test@test.com",
        "password" : "test"
    }
]}

这是我从文件中获取 JSONObject 的方法:

public JSONObject returnJSONObject(String path) throws JSONException, IOException 
{
    path = System.getProperty("user.dir") + path;
    
    JSONObject obj = parseJSONFile(path);

    return obj;
}

public static JSONObject parseJSONFile(String filename) throws JSONException, IOException 
{
    String content = new String(Files.readAllBytes(Paths.get(filename)));
    Reporter.log(content);
    return new JSONObject(content);
}

这就是失败的地方。 当我尝试调用'loginPage.login(loginArray.get(0).toString(), loginArray.get(1).toString());';

JSONObject validLogins = returnJSONObject("valid-user-logins.json");
JSONArray loginArray = (JSONArray) validLogins.get("invested");

// submit valid credentials
loginPage.login(loginArray.get(0).toString(), loginArray.get(1).toString());

我运行程序时返回的错误说我的索引 0 超出了长度 0 的范围:

org.json.JSONException: JSONArray initial value should be a string or collection or array.

我对 JSON 很陌生,所以这仍然有点令人困惑,关于我做错了什么有什么想法吗? 任何帮助将不胜感激!

编辑:为澄清起见,我试图从 json 文件中的“投资”数组中获取“电子邮件”和“密码”。

示例文件中的 arrays 每个仅包含一个元素。

JSONArray investedArray = (JSONArray) validLogins.get("invested");
JSONArray notInvestedArray = (JSONArray) validLogins.get("notInvested");

JSON 提醒:

object: { key : value, key : value, ... }
array:  [ value, value, ... ]

您的示例文件是:

{ key : array, key : array }

或者

{ key : [ object ], key : [ object ] }

您没有正确地将 email 和密码从 JSON 阵列中的 object 中拉出。

loginArray包含一个 JSON 数组,其中有一个元素,一个 JSON object。 loginArray.get(0)具有以下值:

{
    "email" : "test@test.com",
    "password" : "test"
}

当您想要提取此 object 中各个属性的值时,您正试图将整个 object 转换为字符串。

要获取 email 地址,请使用loginArray.getJSONObject(0).getString("email") loginArray中的第一个元素作为JSONObject获取,然后将该JSONObjectemail属性的值作为字符串读取。

要获取密码,请使用loginArray.getJSONObject(0).getString("password")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM