Неожиданный конец ввода: разбор Json с использованием Джексона - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь прочитать подробности конфигурации базы данных и анализирую строку json, используя средство отображения Джексона, и получаю исключение как неожиданный конец ввода: ожидаемый маркер закрытия для ARRAY.

DatabaseConfiguration является классом pojo сдве переменные имя и значение Мне нужно проанализировать это с помощью парсера Джексона.

Исключение: com.fasterxml.jackson.core.JsonParseException: неожиданный конец ввода: ожидаемый маркер закрытия для ARRAY (из [Source: [; строка: 1, столбец: 0]) в[Источник: [;строка: 1, столбец: 3]

JsonString:

[
    {
        "Name": "driverclass", 
        "Value": "com.mysql.jdbc.Driver"
    }, 
    {
        "Name": "password", 
        "Value": "abc"
    }, 
    {
        "Name": "url", 
        "Value": "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false"
    }, 
    {
        "Name": "username", 
        "Value": "abc"
    }
]

также пытался JSON String:

 [ { "Name": "jdbc.connection.driver_class", "Value": "com.mysql.jdbc.Driver" }, { "Name": "password", "Value": "abc" }, { "Name": "url", "Value": "jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false" }, { "Name": "username", "Value": "abc" } ]

код:

import java.io.IOException;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;

public class Parser {

    private static void parseJson(String dbConnectionValues) {

        try {

            List<DatabaseConfiguration> list = new ObjectMapper().readValue(dbConnectionValues,
                    TypeFactory.defaultInstance().constructCollectionType(List.class, DatabaseConfiguration.class));

            for (DatabaseConfiguration l : list) {
                String key = l.getName();
                String value = l.getValue();
                System.out.println("key:" + key + "value:" + value);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        String jsonString = args[0];
        parseJson(jsonString);
    }

}



   @JsonIgnoreProperties(ignoreUnknown = true)
public class DatabaseConfiguration {

    String name;
    String value;

    @JsonProperty("Name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("Value")
    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

1 Ответ

0 голосов
/ 27 ноября 2018

Мне не удалось воспроизвести ваше точное исключение, но я вижу проблемы соглашения об именах в вашем классе java и объекте json.Вы не следуете за верблюжьим корпусом, и это, безусловно, приведет к неправильным отображениям полей и, следовательно, вызовет исключение при разборе, отличное от того, с которым вы столкнулись.

Я только что внес эти изменения в ваш класс json string & DBConfig,и я смог успешно выполнить код.

class DatabaseConfiguration {

    String name;
    String value;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}


String testJson = "[{\"name\":\"driverclass\",\"value\":\"com.mysql.jdbc.Driver\"},{\"name\":\"password\",\"value\":\"abc\"},{\"name\":\"url\",\"value\":\"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false\"},{\"name\":\"username\",\"value\":\"abc\"}]";


[
   {
      "name":"driverclass",
      "value":"com.mysql.jdbc.Driver"
   },
   {
      "name":"password",
      "value":"abc"
   },
   {
      "name":"url",
      "value":"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false"
   },
   {
      "name":"username",
      "value":"abc"
   }
]

Ваша строка ввода json командной строки должна выглядеть так, заключенная в двойные кавычки:

"[ { \"Name\": \"jdbc.connection.driver_class\", \"Value\": \"com.mysql.jdbc.Driver\" }, { \"Name\": \"password\", \"Value\": \"abc\" }, { \"Name\": \"url\", \"Value\": \"jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false\" }, { \"Name\": \"username\", \"Value\": \"abc\" } ]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...