Как вставить данные JSON в базу данных - PullRequest
0 голосов
/ 11 июня 2019

Из моего пользовательского интерфейса через ajax я получаю данные JSON, которые я пытаюсь вставить в свою базу данных, о которых я понятия не имею, как я могу это сделать, я знаю, как вставить что-то в базу данных, используя prepared statements, ноздесь, в случае JSON, я полностью сбит с толку

Это мой JSON, который я получаю в своем коде сервлета doPost

{"ImageData":[{"Counter":"Counter A","Name":"CountA1.jpg","IsActive":"Y"},{"Counter":"Counter A","Name":"CountA2.jpg","IsActive":"Y"}]}

->

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        Scanner scanner = new Scanner(request.getInputStream());
            String imageData = scanner.nextLine();
    System.out.println(imageData);

}

теперь яхочу сохранить это в моем БД как This

Нужно ли мне анализировать этот JSON, как я буду это делать ps.setInt(index, 0);, я не понимаю

Редактировать / обновить

Как @ Анджана Сенанаяке ответить Я делаю так

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Scanner scanner = new Scanner(request.getInputStream());
        String imageData = scanner.nextLine();
        System.out.println(imageData);
        JSONObject jsonObj = new JSONObject(imageData);
        JSONArray jsonArray = jsonObj.getJSONArray("ImageData");

        JSONObject innerObj = new JSONObject(jsonArray); // this one is throwing error 
// eror is `The type of the expression must be an array type but it resolved to JSONArray`
        String counter = innerObj.getString("Counter");
        String name = innerObj.getString("Name");
        String isActive = innerObj.getString("IsActive");

        System.out.println(counter);

    }

Но выдает ошибку на JSONObject innerObj = new JSONObject(jsonArray[0]);ошибка The type of the expression must be an array type but it resolved to JSONArray

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

У вас есть несколько вариантов здесь. Это зависит от того, чего вы хотите достичь:)

Быстро и грязно

Сохранить как строку. Вам нужно будет создать новый класс с String объектом, затем поместить данные JSON в этот объект и сохранить его.

Я понял, что это не сработает, потому что это не то, что вы на самом деле хотите:)

Лучший способ сделать это

Создать новый класс со всеми полями.

// File: ImageData.java
public class ImageData {
    private String counter;
    private String name;
    private String isActiveJpg;

    // getters and setters
}

// File: Data.java
public class Data {
    private List<ImageData> imageDataList;

    // getters and setters
}

Имея эти классы на месте, вы готовы использовать библиотеку Джексона или GSON . Пожалуйста, посмотрите на пример использования для Джексона здесь и GSON сериализация и десериализация .

Sidenote

Я бы порекомендовал переосмыслить сам дизайн. Например. наименование полей и логика сущности вводит в заблуждение (такие вещи, как isActiveJpg. Это должно быть Set, и оно должно иметь лучшее название, например isJpg или что-то в этом роде).

1 голос
/ 11 июня 2019

Используйте библиотеку org.json, чтобы проанализировать ее и создать JsonObject: -

JSONObject jsonObj = new JSONObject(imageData);
JSONArray jsonArray = jsonObj.getJSONArray("ImageData");

Теперь используйте этот объект для получения ваших значений: -

JSONObject innerObj = new JSONObject(jsonArray[0]);

String counter = innerObj.getString("Counter");
String name = innerObj.getString("Name");
String isActive = innerObj.getString("IsActive");

, так как это массивобъектов, вы должны повторить выше для всех элементов в jsonObj.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...