java - 使用 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();
}
但这最终会变成一个仅包含引号中的字符串值的字段。
解决方案
您可以静态创建如下 JSON 对象
{
"newValue": "someValue",
"storedFilters": []
}
然后您可以将javax.json.stream.JsonGenerator
生成的值动态添加到 JSON 数组storedFilters
中。
推荐阅读
- php - Codeigntier 3.1,$this->db->insert() 未按预期返回 id
- java - 使用 Regex Pattern.compile 时如何删除换行符
- python - 如何从我用 Telebot 回复的消息中获取用户 ID?
- snowflake-cloud-data-platform - 我们可以像在 SQL Server 中那样加密雪花中的存储过程吗?
- html - 与相邻单元格的特定元素对齐
- java - 功能接口,功能方法和lamda?
- php - Laravel 重置密码正在生成 404 页面错误
- mysql - 在数据库中存储查询条件
- autodesk-forge - Forge API:获取所有更改的项目
- django - 过滤数据表服务器端时无法将关键字“优先级”解析为字段。选项有:事件名称、ID、密钥、时间戳