gpt4 book ai didi

json - 使用 Freemarker 评估具有空值的 JSon

转载 作者:行者123 更新时间:2023-12-05 00:43:39 24 4
gpt4 key购买 nike

当处理一些值为空的 JSon 时,Freemarker 在 ?eval 中给出错误。

使用 mapper.setSerializationInclusion(Inclusion.NON_NULL) 我可以避免这种情况,但我错过了有关生成的 JSon 的信息。

有没有办法用这个空值来实现评估?

<#assign test = "{\"foo\":\"bar\"}">
<#assign m = test?eval>
${m.foo} <#-- prints: bar -->

评估失败

<#assign test = "{\"foo\":null}">
<#assign m = test?eval> <#-- fail in eval -->
${m.foo}

最佳答案

更新:FreeMarker 2.3.31 添加了?eval_json。它可以解析 null,但不能调用方法(这可能是 ?eval 的安全问题)。

不幸的是(或者……令人气愤的是)FTL 不知道null 的概念(尽管这可能会随着 2.4 的变化而改变)。因此,即使您设法从存在 foo 键但关联值为 null 的 JSON 创建一个 Map(就像您创建这样的Map 在 Java 中),${m.foo} 仍然会失败。当然,您可以编写 ${m.foo!'null'},但即使根本没有 foo 键,也会打印出 null。因此,如果您在 JSON 评估期间为 null-s 提供默认值可能会更好:

<#function parseJSON json>
<#local null = 'null'> <#-- null is not a keyword in FTL -->
<#return json?eval>
</#function>

${parseJSON("{\"foo\":null}").foo} <#-- prints null -->

但是,现在您无法区分 "null"null。如果这是一个问题,您可以选择一些奇怪的默认值,例如 '@@@null' 或什至使用宏作为指标值,然后使用 ?is_macro 来测试是否值为 null(该 hack 很有用,因为 JSON 评估无法生成宏)...

关于json - 使用 Freemarker 评估具有空值的 JSon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com