Отобразить строку в JSON с помощью JsonGenerator - PullRequest
0 голосов
/ 26 февраля 2020

Данный массив JSON

[
    {
        "ref": "idValue",
        "data": {
            "filter": [
                {
                    "property": "number"
                }
            ],
            "stateId": "contacts"
        }
    }
]

Я храню этот массив как строку в базе данных.

Теперь я хочу встроить данную строку в новый объект JSON , динамически генерируется javax. json .stream.JsonGenerator .

Возможный результат должен выглядеть следующим образом:

{
    "newValue": "someValue",
    "storedFilters": [
        {
            "ref": "idValue",
            "data": {
                "filter": [
                    {
                        "property": "number"
                    }
                ],
                "stateId": "contacts"
            }
        }
    ]
}

Есть ли возможность достичь этого?

Мой подход:

String jsonStringValue = ... // Contains JSON content of a previous request
HttpServletResponse resp = ...
List<Event> events = ...
OutputStream os = resp.getOutputStream();
Map<String, Boolean> config = new HashMap<String, Boolean>();
if (prettyPrint) {
    config.put(JsonGenerator.PRETTY_PRINTING, Boolean.TRUE);
}
JsonGeneratorFactory jgf = Json.createGeneratorFactory(config);
JsonGenerator jg = jgf.createGenerator(os);

if (events.size() > 1) {
    jg.writeStartArray();
}

// Some generic stuff happens here which is based on the 'events' list

jg.writeStartObject();
jg.write(JsonConstants.FILTERS, jsonStringValue);
jg.writeEnd();

if (events.size() > 1) {
    jg.writeEnd();
}

Но это заканчивается в поле, которое просто содержит значение String в кавычках.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Вы можете попробовать следующую реализацию, если она работает для вас.

String str = "[\n" + "    {\n" + "        \"ref\": \"idValue\",\n" + "        \"data\": {\n"
                + "            \"filter\": [\n" + "                {\n"
                + "                    \"property\": \"number\"\n" + "                }\n" + "            ],\n"
                + "            \"stateId\": \"contacts\"\n" + "        }\n" + "    }\n" + "]";
        JsonFactory factory = new JsonFactory();
        StringWriter jsonObjectWriter = new StringWriter();
        JsonGenerator generator = factory.createJsonGenerator(jsonObjectWriter);

        generator.useDefaultPrettyPrinter(); // pretty print JSON

        generator.writeStartObject();
        generator.writeFieldName("newValue");
        generator.writeString("someValue");
        generator.writeFieldName("storedFilters");
        generator.writeRawValue(str);
        generator.writeEndObject();
        generator.close(); // to close the generator
        System.out.println(jsonObjectWriter.toString());

Вывод:

{
  "newValue": "someValue",
  "storedFilters": [
    {
      "ref": "idValue",
      "data": {
        "filter": [
          {
            "property": "number"
          }
        ],
        "stateId": "contacts"
      }
    }
  ]
}
0 голосов
/ 26 февраля 2020

Вы можете статически создать JSON объект, как показано ниже

{
    "newValue": "someValue",
    "storedFilters": []
}

Затем вы можете динамически добавить сгенерированное значение javax.json.stream.JsonGenerator в JSON Array storedFilters.

...