Как разрешить MalformedJsonException: неопределенный объект, который существует даже после установки JsonReader на снисходительный - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь проанализировать два файла json и преобразовать их в Map<String, Object>, используя gson, но, выполняя приведенное выше преобразование, используя gson, я получаю com.google.gson.stream.MalformedJsonException: исключение для неопределенного объекта.

У меня есть файл 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

Есть ли что-то еще, что я должен сделать, чтобы преодолеть исключение?

1 Ответ

0 голосов
/ 14 мая 2019

Я не уверен, зачем вам 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 действителен

...