我正在寻找一个可以在运行时将Json封送到对象时可以进行变量替换的Java库。
例如,Json模板将具有可变替换站点/占位符,如:
{
"User": {
"Name": "${name}",
"Age": ${age}
}
}
这将导致Java对象在编组后表示以下内容:
{
"User": {
"Name": "Elvis",
"Age": 80
}
}
我想要的是这样的:
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("c:\\user.json.template"), User.class, "Elvis", 80);
答案 0 :(得分:0)
这实际上超出了JSON库的范围,因为JSON格式本身没有变量替换的支持或概念。您最好的选择可能是使用JSON库(如Jackson)获取树形图(对于Jackson将是JsonNode
),然后遍历它,并使用另一个库来处理文本替换。有许多人可以做到这一点,从stringtemplate
到其他人(也许是其他答案所指的MessageFormat
)。
如果你的替换永远不会搞笑,那么也可能还原另一个"有趣的角色" (引号,换行);如果是这样,你可以先使用字符串模板库,然后再使用JSON解析器处理已处理的文本。 但它风险更大,因为通常最终有一种情况,你最终会尝试添加引号,然后解析失败。
答案 1 :(得分:0)
您可以使用模板引擎,例如Apache Velocity来预处理输入流,然后使用JSON解析器解析结果。要使该过程“即时”,您可以在单独的线程中运行Velocity,并将其输出写入PipedOutputStream
。
答案 2 :(得分:-1)
可能是来自apache commons的MessageFormat对象可以帮忙吗? 以下是一个示例:http://examples.javacodegeeks.com/core-java/text/messageformat/java-messageformat-example/