[英]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
获取,然后将该JSONObject
的email
属性的值作为字符串读取。
要获取密码,请使用loginArray.getJSONObject(0).getString("password")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.