我有一个带有一些数组的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将为您工作。)
getJSONObject
然后,要访问“对象”中的字符串元素,请JSONObject按元素名称将其取出。
JSONObject
String a = objects.get("A");
如果需要中的元素名称,则JSONObject可以使用静态实用程序方法JSONObject.getNames(JSONObject)来实现。
JSONObject.getNames(JSONObject)
String[] elementNames = JSONObject.getNames(objects);
“获取第一个元素的值和最后一个元素的值。”
如果“ element”是指数组中的组件,请注意第一个组件在索引0处,最后一个组件在index处getArray.length() - 1。
getArray.length() - 1
我想遍历数组中的对象并获取其组件和值。在我的示例中,第一个对象具有3个成分,scond具有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 */