Как удалить лишние экранирующие кавычки JsonObject, созданные с помощью Javax

Я использую javax для создания JsonObject и JsonArray из моего List<String>, и у меня есть список объектов Json, которые я хочу поместить в JsonObject через JsonArray

    JsonArrayBuilder jsonArray = Json.createArrayBuilder(); 
    for (String Obj : listOfJsonDfObjects) 
       jsonArray.add(summaryObj);   //{"a":"b"},{"c":"d"}
   
    // this line introduces extra escaping quotes like this {"\"a\"":"\"b\""},{"\"c\"":"\"d\""}
    javax.json.JsonObject data = Json.createObjectBuilder()
       .add("data", jsonArray.build()).build();  

Как избежать этих дополнительных кавычек, экранирующих символы? Спасибо

Пожалуйста, предоставьте полный минимальный воспроизводимый пример, возможно, даже как неудачный модульный тест, поэтому ваше ожидание находится в коде.

cyberbrain 15.02.2023 20:15

Добавьте код, где вы заполняете свой List<String>

Pepe N O 15.02.2023 20:28

Это выходит за рамки этого вопроса, но я показываю пример такого списка: [{"a":"b"},{"c":"d"},..]

Sam 15.02.2023 20:32

Если вы ограничены использованием javax.json API и реализации, вы можете взять каждую строку, такую ​​как {"a":"b"}, и извлечь ее ключ и значение (a и b), используя обычную Java. Затем вы можете использовать JsonObjectBuilder jsonObj = Json.createObjectBuilder() и создать объект JSON из каждого ключа и значения — `jsonObj.add(key, val). Затем добавьте это в свой массив JSON вместо добавления необработанной строки.

andrewJames 15.02.2023 21:45

Или (если вы не ограничены javax) просто используйте библиотеку, которая может анализировать JSON-как-строку непосредственно в объекты и массивы JSON (Jackson, Gson и т. д.).

andrewJames 15.02.2023 21:46

Используя Gson, я также заметил дополнительные кавычки. Не могли бы вы показать нам пример Gson?

Sam 15.02.2023 22:06
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
1
6
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использование Гсона

    Gson gson = new Gson();
    String json = gson.toJson(listOfJsonDfObjects);        
    //check json
    System.out.println(json);        
    json = json.replaceAll("\\\\", "");
    json = json.replaceAll("\"\\{", "{");
    json = json.replaceAll("\\}\"", "}");        
    //valid json now
    System.out.println(json);

Более безопасный способ (чтобы избежать изменения исходных данных)

    //concatenate objects in list with comma
    String json = String.join(",", listOfJsonDfObjects);
    //convert to pseudo array
    json = "[" + json + "]"; 
    //convert pseudo json array to pseudo json object
    json = "{\"data\":" + json + "}";
    //cast to json object
    JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);                       
    System.out.println(jsonObject);

Не опасно ли заменять символы, как вы? вы можете непреднамеренно изменить основные данные json.

Sam 15.02.2023 23:52

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

Tim Moore 16.02.2023 01:32

Вы правы, я попытаюсь улучшить этот код позже.

Pepe N O 16.02.2023 01:59
Ответ принят как подходящий

Вы говорите, что у вас есть список объектов JSON, но на самом деле у вас есть список строк в формате JSON. Чтобы добавить их в JsonArray, вам нужно проанализировать каждую из них в объектной модели JSON:

public class JsonTest {
    public static void main(String[] args) {
        List<String> listOfJsonDfObjects = List.of(
                "{\"a\":\"b\"}",
                "{\"c\":\"d\"}"
        );
        JsonArrayBuilder jsonArray = Json.createArrayBuilder();
        for (String summaryObj : listOfJsonDfObjects) {
            JsonReader parser = Json.createReader(new StringReader(summaryObj));
            jsonArray.add(parser.readObject());
        }

        JsonObject data = Json.createObjectBuilder()
                .add("data", jsonArray.build()).build();

        System.out.println(data); // {"data":[{"a":"b"},{"c":"d"}]}
    }
}

Другие вопросы по теме