我需要从json数组文件(GoogleTranslate)中获取字符串
for (int i = 0; i <= UserData.size(); i++) {
println("FORR");
println(i, UserData.size());
if(i == UserData.size()){
println("::::::::::::::::1");
JSONObject NamePass = UserData.getJSONObject(i-2); //Ошибка
String PassName = NamePass.getString("pn");
[
[{
"name": "userName",
"pn": "Password + userName"
}],
[{
"name": "userName",
"pn": "Password + userName1212121"
}],
[{
"name": "11",
"pn": "22211"
}],
[{
"name": "fedya",
"pn": "feda111fedya"
}]
]
结果,namePass应该等于pn(请参阅JSONarray文件),但是在执行代码时,错误“ JSONArray [3]不是JSONObject。
您的代码有些不足:
i <= UserData.size();
-数组/列表索引在Processing / java中从0开始。该=
条件将使您的索引超出列表大小UserData.getJSONObject(i-2);
-i-2
将评估到-2
并-1
在头两个迭代循环,这两个指数是边界外(0-3你的情况)例如:
[{
"name": "userName",
"pn": "Password + userName"
}],
可能是这样的:
{
"name": "userName",
"pn": "Password + userName"
},
如果没有其他同级元素。
小注释:根据Java Coding Conventions,您应该对类名的首字符使用大写字母,对于实例的首字符使用小写字母。(例如userData
,namePass
,passName
)它使代码更易于阅读和预测。
要遍历数据,我首先要对JSON结构进行一些简化:
[
{
"name": "userName",
"pn": "Password + userName"
},
{
"name": "userName",
"pn": "Password + userName1212121"
},
{
"name": "11",
"pn": "22211"
},
{
"name": "fedya",
"pn": "feda111fedya"
}
]
然后简单地加载/迭代数据(不需要任何复杂的索引):
// load the data
JSONArray data = loadJSONArray("/path/to/your/data.json");
// iterate through the data
for(int i = 0 ; i < data.size(); i++){
// access each user object
JSONObject user = data.getJSONObject(i);
// extract each property from that object
String name = user.getString("name");
String pn = user.getString("pn");
// test/print data
println("data[" + i + "] = " + user.format(-1) + " -> name = " + name + " , pn = " + pn);
}
您非常接近,但是,我认为造成这种混淆的原因是您当前的JSON格式,即您在数组中嵌套了一个对象,而您可能会错过它。
例如
JSONObject NamePass = UserData.getJSONObject(i-2);
应该是:
// access the i-th array within the top level array, and extract the first object within that
JSONObject namePass = UserData.getJSONArray(i).getJSONObject(0);
有关更多信息,请查阅JSONArray和JSONObject的参考(并使用提供的示例代码)
如果有帮助,这里有一个使用JavaScript而不是Java的插图。使用当前数据:
userData = [
[{
"name": "userName",
"pn": "Password + userName"
}],
[{
"name": "userName",
"pn": "Password + userName1212121"
}],
[{
"name": "11",
"pn": "22211"
}],
[{
"name": "fedya",
"pn": "feda111fedya"
}]
];
// iterate through the main array
for(let i = 0; i < userData.length; i++){
// print the index
console.log(i,'/',userData.length-1);
// access the array that contains the object first, then the first (and only) element
let user = userData[i][0];
// access object property
console.log(user.pn);
}
删除数组层:
userData = [
{
"name": "userName",
"pn": "Password + userName"
},
{
"name": "userName",
"pn": "Password + userName1212121"
},
{
"name": "11",
"pn": "22211"
},
{
"name": "fedya",
"pn": "feda111fedya"
}
];
// iterate through the main array
for(let i = 0; i < userData.length; i++){
// print the index
console.log(i,'/',userData.length-1);
// access the object directly
let user = userData[i];
// access object property
console.log(user.pn);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句