java - JSON 变量替换占位符

标签 java json jackson

我正在寻找一个 Java 库,它可以在将 Json 动态编码(marshal)到对象时进行变量替换。

例如,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);

最佳答案

这确实超出了 JSON 库的范围,因为 JSON 格式本身不支持或没有变量替换的概念。您最好的选择可能是使用 JSON 库(如 Jackson)来获取树表示(对于 Jackson 来说是 JsonNode),然后遍历它,并使用另一个库来处理文本替换。有很多可以做到这一点,从 stringtemplate 到其他(可能是其他答案引用的 MessageFormat)。

如果您的替换永远不会有趣的“有趣的字符”(引号、换行符),也可以还原另一个;如果是这样,您可以首先使用字符串模板库,然后使用 JSON 解析器提供已处理的文本。 但这有点冒险,因为通常最终会出现一种情况,您最终会尝试添加引号,然后解析失败。

关于java - JSON 变量替换占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093828/

相关文章:

java - 即使我添加自定义的反序列化器,Jackson 也无法将枚举反序列化为对象

javascript - 无法将 json 数据映射到 js 模型

java - 在 Appengine 数据存储查看器中编辑文本字段

java - 启用 JPA 静态编织(eclipselink)

java - 无法从 QuickAction 打开 AlertDialog

java - 使用 Jackson 反序列化为自定义对象的 HashMap

java - jackson : partial deserialization to List<String>

java - Android NDK 使用 gradle 和 jitpack 引入 JNI 东西?

android - 在 android 中以 Kb 或 Mb 计算 Json 数组大小?

java - 如何配置 Jackson ObjectMapper 以仅显示白名单属性?