【发布时间】:2019-01-20 15:37:37
【问题描述】:
我正在尝试填充 JSON 对象,以便将其发送到 REST 端点并获得响应。
没有“构建”这些请求的 API,所以我只是存储一个如下所示的 JSON 文本文件:
"query": {
"bool": {
"must": [
{
"range": {
"request_time": {
"gte": {{START_TIME}},
"lte": {{END_TIME}},
"format": "epoch_millis"
}
}
}
],
"filter": [
{
"match_all": {}
},
{
"geo_bounding_box": {
"{{LOCATION_FIELD_NAME}}": {
"top_left": {
"lat": {{TOP_LEFT_LAT}},
"lon": {{TOP_LEFT_LON}}
},
"bottom_right": {
"lat": {{BOTTOM_RIGHT_LAT}},
"lon": {{BOTTOM_RIGHT_LON}}
}
}
}
}
],
"should": [],
"must_not": []
}
}
然后我用键、值对填充一个 HashMap,其中键是 {{*EXPRESSION*}},值是我希望替换它们的 Strings、Doubles 等。
最后,我通过文本文件搜索分隔符:{{、}},并将键替换为值。
这对我来说似乎真的是贫民窟,而且显然很难测试。我正在使用 Jackson 库来解析我的响应,ObjectMapper 可以让您将 JSON 转换为 POJO 并返回,这很好,但我不想经历定义 15 个类的麻烦,只是为了编译上面的骨架(我知道每次都是一样的)。是否有一种通过文本文件向 Jackson 提供 JSON 模式并仅填充某些字段的事实上的方法?
谢谢!
【问题讨论】:
-
手动编写 json 对于小事情可能很好,但它可能会变得很麻烦,如果你开始有需要转义的字符、日期等,更是如此。我找到的最简单的方法是这样做正在使用谷歌的 gson 库。
-
如何使用 java String API 替换 json 字符串中的表达式,然后从更新的字符串中形成一个对象(单个对象)?
-
一种方法是将模板解析为带有
mapper.readTree的JsonNode,然后遍历树以更新您的模板值。它会更健壮,因为您可以确定您的序列化值是有效的 JSON。
标签: java json jackson schema populate