JSON变量替换占位符

时间:2015-01-22 16:28:24

标签: java json jackson

我正在寻找一个可以在运行时将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);

3 个答案:

答案 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/