java - 如何解决 MalformedJsonException : Unterminated object that exist even after setting JsonReader to lenient

标签 java json gson jsonparser jsonreader

我正在尝试解析两个 json 文件并将它们转换为 Map<String, Object>使用 gson 但在使用 gson 进行上述转换时,我收到 com.google.gson.stream.MalformedJsonException: Untermerated object 异常。

我的 json 文件如下:

{"obj":
    {
        "thumbnail":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAACQCAYAAABeUmTwAAAW==",
        "file":"2",
        "CreatedOn":"Mon May 13 16:24:52 IST 2019"
    },
    "Status":"Created",
    "Modified":"false",
    "Tags":{"Business":"No","Entertainment":"Yes"}
}

问题是如果 json 对象或“:”中有一些空格,那么它会抛出该错误,我也尝试将 JsonReader 设置为 Lenient,但这也没有帮助

我尝试过以下代码:

    JSONParser parser1 = new JSONParser(new FileReader("D:/New Folder/2.json"));
    Object obj1 = parser1.parse();

    JsonReader reader1 = new JsonReader(new StringReader(obj1.toString()));
    reader1.setLenient(true);

    Type mapType = new TypeToken<Map<String, Object>>(){}.getType();

    Map<String, Object> firstMap = gson.fromJson(reader1, mapType);

它向我抛出以下异常

Exception in thread "main" com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 22 path $..thumbnail


at com.google.gson.Gson.fromJson(Gson.java:942)
    at com.cts.ciqd.gitpoc.Git.Poc.test.FlatMapUtil.main(FlatMapUtil.java:85)
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 22 path $..thumbnail
    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1568)
    at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:491)
    at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:414)
    at com.google.gson.internal.bind.ObjectTypeAdapter.read(ObjectTypeAdapter.java:69)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
    at com.google.gson.Gson.fromJson(Gson.java:927)
    ... 1 more

我还应该做些什么来克服异常吗?

最佳答案

我不确定为什么在此用例中需要 JsonParser 和阅读器。

我认为您可以通过以下方式实现您想要的目标:

byte[] encoded = Files.readAllBytes(Paths.get("<your path>"));
Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> firstMap = new Gson().fromJson(new String(encoded, Charset.defaultCharset()), mapType);

并确保 json 有效

关于java - 如何解决 MalformedJsonException : Unterminated object that exist even after setting JsonReader to lenient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127583/

相关文章:

Java JFreeChart - 获取边界点坐标

java - 比较 ArrayList 中的 JSONArray 列表

php - iPhone 手机 safari JSON 解析错误

java - 防止在调整 JButton 的容器大小时调整其大小

java - Android 在循环进程运行时不调用 onPause 和 onStop

javascript - 新行在客户端和服务器端如何字符串化?

java - 无法使用 GSON 将复杂的 json 序列化为对象?

java - 使用Gson反序列化另一个对象内的对象数组

java - 当结构不同时如何将JSON字符串转换为JAVA对象

java - 按值传递 - 树未删除