JSON - 通过JSONArray迭代

Eri*_*rik 54 java json

我有一个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"
        }

    ]
}

}       
Run Code Online (Sandbox Code Playgroud)

这是我走了多远:

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.
}
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

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

Pro*_*uce 75

更改

JSONObject objects = getArray.getJSONArray(i);
Run Code Online (Sandbox Code Playgroud)

JSONObject objects = getArray.getJSONObject(i);
Run Code Online (Sandbox Code Playgroud)

或者

JSONObject objects = getArray.optJSONObject(i);
Run Code Online (Sandbox Code Playgroud)

取决于您正在使用的JSON-to/from-Java库.(看起来getJSONObject对你有用.)

然后,要访问"对象"中的字符串元素,请JSONObject按元素名称将其删除.

String a = objects.get("A");
Run Code Online (Sandbox Code Playgroud)

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

String[] elementNames = JSONObject.getNames(objects);
Run Code Online (Sandbox Code Playgroud)

"获取第一个元素的值和最后一个元素的值."

如果"element"指的是数组中的组件,请注意第一个组件位于索引0,最后一个组件位于索引处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
*/
Run Code Online (Sandbox Code Playgroud)

  • 来自python,看起来像回到组装! (2认同)

Mar*_*tin 13

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("-----------");

        }
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人


Sea*_*oyd 6

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

您需要检查类型:

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

在您的情况下,元素将是JSONObject类型,因此您需要强制转换为JSONObject并调用JSONObject.names()以检索各个键.


aia*_*tro 5

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

  • 在我的例子中尝试了你的方法,我检索到以下错误:“找不到符号方法 iterator()” (2认同)