我从json文件解析一些数据。这是我的JSON文件。
[
{
"topic": "Example1",
"contact": [
{
"ref": [
1
],
"corresponding": true,
"name": "XYZ"
},
{
"ref": [
1
],
"name": "ZXY"
},
{
"ref": [
1
],
"name": "ABC"
},
{
"ref": [
1,
2
],
"name":"BCA"
}
] ,
"type": "Presentation"
},
{
"topic": "Example2",
"contact": [
{
"ref": [
1
],
"corresponding": true,
"name": "XYZ"
},
{
"ref": [
1
],
"name": "ZXY"
},
{
"ref": [
1
],
"name": "ABC"
},
{
"ref": [
1,
2
],
"name":"BCA"
}
] ,
"type": "Poster"
}
]
我可以逐个获取和存储数据。喜欢这个
JSONArray getContactsArray = new JSONArray(jsonObject.getString("contact"));
for(int a =0 ; a < getContactsArray.length(); a++)
{
JSONObject getJSonObj = (JSONObject)getContactsArray.get(a);
String Name = getJSonObj.getString("name");
}
1)现在,我的问题是有没有办法通过单个查询获取每个数组的所有name
值。
2)我可以在Array
中获取所有这些值吗?
如果我做错了,请纠正我。谢谢。
答案 0 :(得分:2)
此处无法避免迭代,因为org.json
和其他Json解析器也提供对对象的随机访问,但不提供对它们的属性的集体(作为集合)。所以,你不能查询像“所有联系对象的所有名称属性”这样的东西,除非你可能得到像 Gson 这样的Json解析器来解组它。
但是,当你可以通过使用适当的API方法来避免不必要的对象强制转换来绝对缩短解析时,这太过于避免for
循环了。
JSONArray contacts = jsonObject.getJSONArray("contact");
String[] contactNames = new String[contacts.length()];
for(int i = 0 ; i < contactNames.length; i++) {
contactNames[i] = contacts.getJSONObject(i).getString("name");
}
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个:
创建文件的JSONObject并尝试获取所有名称的数组并迭代它以获取所有值。
public static String[] getNames(JSONObject jo) {
int length = jo.length();
if (length == 0) {
return null;
}
Iterator i = jo.keys();
String[] names = new String[length];
int j = 0;
while (i.hasNext()) {
names[j] = (String) i.next();
j += 1;
}
return names;
}