在Java中读取JSON对象中的字符串数组

时间:2018-05-30 17:34:09

标签: java json

我有一个看起来像这样的JSON对象,

{
  "students": [
    {
      "Name": "Some name",
      "Bucket": 4,
      "Avoids": ["Foo", "Bar"]
    },
    {
      "Name": "Some other name",
      "Bucket": 1,
      "Avoids": ["Some String"]
    }
  ]
}

我试图用Java解析这个JSON对象。

这是我的Java代码:

Object obj = parser.parse(new FileReader("./data.json"));
JSONObject jsonObject = (JSONObject) obj;

JSONArray students = (JSONArray) jsonObject.get("students");
Iterator<JSONObject> studentIterator = students.iterator();

while (studentIterator.hasNext()) {
    JSONObject student = (JSONObject) studentIterator.next();
    String name = (String) student.get("Name");

    double bucketValue;

    if (student.get("Bucket") instanceof Long) {
        bucketValue = ((Long) student.get("Bucket")).doubleValue();
    } else {
        bucketValue = (double) student.get("Bucket");
    }

    JSONArray avoids = (JSONArray) student.get("Avoids");
    Iterator<JSONObject> avoidsIterator = avoids.iterator();

    while (avoidsIterator.hasNext()) {
        String s = (String) avoidsIterator.next();
    }
}

直到我尝试解析&#34; Avoids&#34;阵列。这个数组保证只有字符串。但是,当我做的时候

String s = (String) avoidsIterator.next();

我明白了,

error: incompatible types: JSONObject cannot be converted to String

预期。但我确信Avoids数组中的所有值都是字符串。我如何获得所有这些字符串?

还有一些Avoids数组为空的情况。

2 个答案:

答案 0 :(得分:1)

avoidsIterator更改为字符串的迭代器,而不是JsonObject的迭代器

Iterator<String> avoidsIterator = avoids.iterator();
while (avoidsIterator.hasNext()) {
    String s =  avoidsIterator.next();
    System.out.println(s);     
}

<强>输出

Foo
Bar
Some String

答案 1 :(得分:0)

我不明白为什么这不起作用。

conftest