首页 > 解决方案 > 使用 JsonGenerator 将字符串映射到 JSON

问题描述

给定的是一个 JSON 数组

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

我将此数组作为字符串存储在数据库中。

现在我想将给定的 String 嵌入到一个新的 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();
}

但这最终会变成一个仅包含引号中的字符串值的字段。

标签: javajsonjavax.json

解决方案


您可以静态创建如下 JSON 对象

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

然后您可以将javax.json.stream.JsonGenerator生成的值动态添加到 JSON 数组storedFilters中。


推荐阅读