1

我尝试同时使用flexjson.JSONSerializercom.fasterxml.jackson.databind.ObjectMapper在 freemarker 模板中将通过 csv 数据加载器加载的 csv 文件转换csv(menu.csv, {trimCells: true})为 JSON。

当我尝试运行它时,出现以下异常:

...
Caused by: java.lang.UnsupportedOperationException: Operation supported only on TemplateHashModelEx. fmpp.models.CsvSequence does not implement it though.
    at freemarker.ext.beans.HashAdapter.getModelEx(HashAdapter.java:186)
    at freemarker.ext.beans.HashAdapter.access$000(HashAdapter.java:38)
    at freemarker.ext.beans.HashAdapter$1.iterator(HashAdapter.java:99)
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:696)
    ... 46 common frames omitted

我还不知道 FreeMarker 的任何内部结构,但在我看来,这CsvSequence确实实现了freemarker.template.TemplateHashModel但不是freemarker.template.TemplateHashModelEx.

我发现的唯一地方getModelEx是在 HashAdaptor 中,所以我假设它使用较新的接口进行哈希。

知道如何解决这个问题吗?

4

1 回答 1

1

CsvSequence实现freemarker.template.TemplateHashModel和,freemarker.template.TemplateSequenceModel请参阅http://fmpp.sourceforge.net/api/fmpp/models/CsvSequence.html

CsvSequence 也是一个包含一个键的散列:标头。这是一个存储标头名称的序列

由于我只想转换序列,而不是标题,我可以简单地将其转换CsvSequence为正常序列,例如:

${JSON.stringify(csvInput[0..])}

或者

${JSON.stringify([] + csvInput)}
于 2021-06-29T10:06:18.620 回答