无法将Json反序列化为String数组

时间:2018-11-02 22:50:43

标签: java json string

我正在尝试采用JSon对象数组并将其放入String数组。我不断收到org.glassfish.json.JsonStringImpl cannot be cast to javax.json.JsonObject 而且不知道该怎么办。

当前,我有:

 BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
  String jsonStr = "";
  if(br != null){
      jsonStr = br.readLine();
  }

  // Create JsonReader object
  StringReader strReader = new StringReader(jsonStr);
  JsonReader reader = Json.createReader(strReader);

  // Get the singular JSON object (name:value pair) in this message.    
  JsonObject obj = reader.readObject();
  // From the object get the array named "inList"
  JsonArray inArray = obj.getJsonArray("inList");

  String[] myArray = new String[inArray.size()];

  // Fills myArray with Json Objects converted to Strings
 for (int i = 0; i < inArray.size(); i++) {
     myArray[i] = inArray.get(i).toString();
  }

示例输入Json是:{“ inList”:[“ Bob”,“ boj”,“ obb”,“ job”,“ BOB”,“ foo”]}

1 个答案:

答案 0 :(得分:-1)

所以在我看来,由于不匹配,您无法正确解析json。在Java中解析JSON时,强烈建议使用名为GSON的库。

我在下面提供了完整的解决方案:

class ClassName {
    static Gson gson = new Gson();

    public static void main(String[] args) {
        String jsonStr = " { \"inList\" : [ \"Bob\", \"boj\", \"obb\", \"job\", \"BOB\", \"foo\" ] }";

        String[] inList = gson.fromJson(jsonStr, Container.class).inList;

        for (String s : inList) System.out.println(s);
    }

    private class Container {
        String[] inList;
    }
}

输出:

Bob
boj
obb
job
BOB
foo

您仍然可以像执行操作一样获取JSON字符串(如果遇到麻烦,请提出其他问题),但是您只需将我的代码粘贴在下面即可成功解析JSON数组。

也可以获取列表而不是数组。您可以通过将容器类中的字段替换为List<String> inList;,并将main中的行更改为:

List<String> inList = gson.fromJson(jsonStr, Container.class).inList;

有关代码的其他说明: 您的if语句if (br != null)始终为true,因为您是在上面将其初始化的。此外,以下jsonStr = br.readLine()可能会引发IOException。您可以这样捕获它:

 try {
      jsonStr = br.readLine();
 } catch (IOException e) {
      e.printStackTrace();
      //do whatever you want etc.
 }