java - 无法将 Json 反序列化为字符串数组
问题描述
我正在尝试获取一组 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" ] }
解决方案
所以在我看来,由于不匹配,您没有完全正确地解析 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 而不是 Array。您可以通过将容器类中的字段替换为List<String> inList;
,并将 main 中的行更改为:
List<String> inList = gson.fromJson(jsonStr, Container.class).inList;
关于您的代码的附加说明:您的 if 语句if (br != null)
始终为真,因为您在上面对其进行了初始化。此外,以下jsonStr = br.readLine()
可能会引发 IOException。你可以像这样抓住它:
try {
jsonStr = br.readLine();
} catch (IOException e) {
e.printStackTrace();
//do whatever you want etc.
}
推荐阅读
- c# - C# 将 DateTime 偏移量添加到大型集合中的 DateTime 属性
- python - 熊猫:如何用条件(字符数)连接行?
- node.js - 如何从端点创建 GraphQL 枚举?
- python - 在 Python 中创建一个从常量向上和向下递增的列表
- excel - 如何将 xlsx 电子表格中的特定工作表提取为文本文件?
- javascript - 使用 Javascript 更改 Firefox 插件 DOM 元素
- python-3.x - lavalink.py 播放本地文件
- html - 例外:格式错误的 HTML 内容:
- python - txt 进入熊猫数据框,首先删除一些行
- source-insight - Source Insight:你能改变空白的颜色吗?