如何从JSON数组获取字符串(处理)

费多

我需要从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。

乔治·普罗芬扎

您的代码有些不足:

  1. i <= UserData.size();-数组/列表索引在Processing / java中从0开始。=条件将使您的索引超出列表大小
  2. UserData.getJSONObject(i-2);-i-2将评估到-2-1在头两个迭代循环,这两个指数是边界外(0-3你的情况)
  3. 无需在JSON数据的单个数组元素中嵌套单个对象。

例如:

[{
    "name": "userName",
    "pn": "Password + userName"
  }],

可能是这样的:

{
    "name": "userName",
    "pn": "Password + userName"
  },

如果没有其他同级元素。

小注释:根据Java Coding Conventions,您应该对类名的首字符使用大写字母,对于实例的首字符使用小写字母(例如userDatanamePasspassName)它使代码更易于阅读和预测。

要遍历数据,我首先要对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);

有关更多信息,请查阅JSONArrayJSONObject的参考(并使用提供的示例代码)

如果有帮助,这里有一个使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章