Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Freemarker中解析JSON时出错_Java_Html_Json_Freemarker - Fatal编程技术网

Java 在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

我试图将一个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\": 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,并且可以调用方法,这可能是一个安全问题。