我正在尝试采用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”]}
答案 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.
}