JSON – 通过JSONArray迭代

我有一个JSON文件,其中有一些数组。 我想遍历文件数组,并获得他们的元素和它们的值。

这是我的文件的样子:

{ "JObjects": { "JArray1": [ { "A": "a", "B": "b", "C": "c" }, { "A": "a1", "B": "b2", "C": "c3", "D": "d4" "E": "e5" }, { "A": "aa", "B": "bb", "C": "cc", "D": "dd" } ] } } 

这是我走了多远:

 JSONObject object = new JSONObject("json-file.json"); JSONObject getObject = object.getJSONObject("JObjects"); JSONArray getArray = getObject.getJSONArray("JArray1"); for(int i = 0; i < getArray.size(); i++) { JSONObject objects = getArray.getJSONArray(i); //Iterate through the elements of the array i. //Get thier value. //Get the value for the first element and the value for the last element. } 

有没有可能做这样的事情?

我想这样做的原因是因为文件中的数组有不同数量的元素。

更改

 JSONObject objects = getArray.getJSONArray(i); 

 JSONObject objects = getArray.getJSONObject(i); 

或者

 JSONObject objects = getArray.optJSONObject(i); 

具体取决于您使用的是哪个JSON到/从Java库。 (它看起来像getJSONObject将为你工作。)

然后,要访问“对象” JSONObject的string元素,请按元素名称将其取出。

 String a = objects.get("A"); 

如果您需要JSONObject元素的名称,则可以使用静态实用程序方法JSONObject.getNames(JSONObject)来执行此操作。

 String[] elementNames = JSONObject.getNames(objects); 

“获取第一个元素的值和最后一个元素的值。”

如果“元素”是指数组中的组件,请注意第一个组件位于索引0,最后一个组件位于索引getArray.length() - 1


我想迭代通过数组中的对象,并获得他们的组件和他们的价值。 在我的例子中,第一个对象有3个组件,第二个有5个,第三个有4个组件。 我想迭代他们每个人,并得到他们的组件名称和价值。

下面的代码完全一样。

 import org.json.JSONArray; import org.json.JSONObject; public class Foo { public static void main(String[] args) throws Exception { String jsonInput = "{\"JObjects\":{\"JArray1\":[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\"},{\"A\":\"a1\",\"B\":\"b2\",\"C\":\"c3\",\"D\":\"d4\",\"E\":\"e5\"},{\"A\":\"aa\",\"B\":\"bb\",\"C\":\"cc\",\"D\":\"dd\"}]}}"; // "I want to iterate though the objects in the array..." JSONObject outerObject = new JSONObject(jsonInput); JSONObject innerObject = outerObject.getJSONObject("JObjects"); JSONArray jsonArray = innerObject.getJSONArray("JArray1"); for (int i = 0, size = jsonArray.length(); i < size; i++) { JSONObject objectInArray = jsonArray.getJSONObject(i); // "...and get thier component and thier value." String[] elementNames = JSONObject.getNames(objectInArray); System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length); for (String elementName : elementNames) { String value = objectInArray.getString(elementName); System.out.printf("name=%s, value=%s\n", elementName, value); } System.out.println(); } } } /* OUTPUT: 3 ELEMENTS IN CURRENT OBJECT: name=A, value=a name=B, value=b name=C, value=c 5 ELEMENTS IN CURRENT OBJECT: name=D, value=d4 name=E, value=e5 name=A, value=a1 name=B, value=b2 name=C, value=c3 4 ELEMENTS IN CURRENT OBJECT: name=D, value=dd name=A, value=aa name=B, value=bb name=C, value=cc */ 
 for (int i = 0; i < getArray.length(); i++) { JSONObject objects = getArray.getJSONObject(i); Iterator key = objects.keys(); while (key.hasNext()) { String k = key.next().toString(); System.out.println("Key : " + k + ", value : " + objects.getString(k)); } // System.out.println(objects.toString()); System.out.println("-----------"); } 

希望这有助于某人

 for(int i = 0; i < getArray.size(); i++){ Object object = getArray.get(i); // now do something with the Object } 

你需要检查的types:

值可以是以下任何types:Boolean,JSONArray,JSONObject,Number,String或JSONObject.NULL对象。 [ 来源 ]

在你的情况下,元素将是JSONObjecttypes,所以你需要转换成JSONObject并调用JSONObject.names()来获取单个的键。

 JsonArray jsonArray; Iterator<JsonElement> it = jsonArray.iterator(); while(it.hasNext()){ System.out.println(it.next()); } 

你可以尝试我(*从各种网站大量借用)recursion方法遍历所有的JSON对象和JSON数组,直到你findJSON元素。 这个例子实际上search一个特定的键并返回该键的所有实例的所有值。 'searchKey'是你正在寻找的关键。

 ArrayList<String> myList = new ArrayList<String>(); myList = findMyKeyValue(yourJsonPayload,null,"A"); //if you only wanted to search for A's values private ArrayList<String> findMyKeyValue(JsonElement element, String key, String searchKey) { //OBJECT if(element.isJsonObject()) { JsonObject jsonObject = element.getAsJsonObject(); //loop through all elements in object for (Map.Entry<String,JsonElement> entry : jsonObject.entrySet()) { JsonElement array = entry.getValue(); findMyKeyValue(array, entry.getKey(), searchKey); } //ARRAY } else if(element.isJsonArray()) { //when an array is found keep 'key' as that is the array's name ie pass it down JsonArray jsonArray = element.getAsJsonArray(); //loop through all elements in array for (JsonElement childElement : jsonArray) { findMyKeyValue(childElement, key, searchKey); } //NEITHER } else { //System.out.println("SKey: " + searchKey + " Key: " + key ); if (key.equals(searchKey)){ listOfValues.add(element.getAsString()); } } return listOfValues; }