Java 在Freemarker中解析JSON时出错
我试图将一个JSON字符串从我的服务器传递到客户机,我想用Freemarker操作它 来自服务器的json是:Java 在Freemarker中解析JSON时出错,java,html,json,freemarker,Java,Html,Json,Freemarker,我试图将一个JSON字符串从我的服务器传递到客户机,我想用Freemarker操作它 来自服务器的json是: "{\"0\": {\"keyA\": 2896.42,\"keyB\": 5.682365615075204,\"keyC\": 1044018.3981740332}, \"1\": {\"keyA\": 2896.73,\"keyB\": 5.683365542595956,\"keyC\": 1043386.221698152}, \"2\": {\"keyA\": 28
"{\"0\":
{\"keyA\": 2896.42,\"keyB\": 5.682365615075204,\"keyC\": 1044018.3981740332},
\"1\":
{\"keyA\": 2896.73,\"keyB\": 5.683365542595956,\"keyC\": 1043386.221698152},
\"2\":
{\"keyA\": 2897.37,\"keyB\": 5.68536539763746,\"keyC\": 1044550.1489558858},
\"3\":
{\"keyA\": 2909.49,\"keyB\": 5.6803657600337,\"keyC\": 1053277.0319540345}}"
HTML中的我的自由标记:
${pj.0.keyA}
提供的错误是:
Encountered "0" at line 894, column 85 in blah/doc.htm.
Was expecting one of:
"false" ...
"true" ...
<LESS_THAN> ...
<LESS_THAN_EQUALS> ...
<ESCAPED_GT> ...
<ESCAPED_GTE> ...
在blah/doc.htm的第894行第85列遇到“0”。
我期待的是:
“假”。。。
“真的”。。。
...
...
...
...
为什么会这样?我已尝试通过[0],“0”]访问键“0”下的值。似乎什么都不管用
有什么想法吗?问题是,与hashmaps类似,freemarker需要一个字符串键 所以我将“0”改为“a”,效果很好
谢谢应该是
${pj['0'].keyA}
这里有些不对劲。JSON还需要字符串键。另外,如果引用0
,比如“0”:“some value”
,那么它就是一个字符串。我知道它当然是一个字符串,但它只是不想这样工作。根本不知道为什么。好吧,您已经编写了pj.0
,在FTL语法中没有这样的快捷方式。就像大多数C语言一样,标识符不能以数字开头。。。甚至在一个点之后也没有。使用${pj['a'].keyA}比${pj.a.keyA}有什么好处吗?pj['a']
比pj.a
没有好处;如果可以,请始终使用不带[]
的表单,因为它看起来更干净。当然,如果键是数字文字或关键字,则必须使用[]
。与上述错误无关,但不要使用?eval
解析JSON,而是使用?eval_JSON
(在FreeMarker 2.3.31中添加)<代码>?eval无法解析所有JSON,并且可以调用方法,这可能是一个安全问题。