我在Java中使用JMustache。
我的Mustache模板中有Map变量。我如何获取地图中特定键的值,就像我们在Java中一样(map.get())。
我知道如何在模板中迭代Map的键和值。但我想要一个没有迭代的解决方案,以便我可以评估一个表达式,如:
{
"cities": [
{
"Tokyo": {
"overview": {
"population": "19000000",
"area": "450000"
}
}
},
{
"Sydney": {
"overview": {
"population": "4500000",
"area": "6250000"
}
}
}
]
}
"The population of Tokyo is: {{cities['Tokyo'].overview.population}}"
答案 0 :(得分:0)
首先,您的胡子语法存在问题。 cities['Tokyo']
无效。 cities
是一个数组。您可以遍历数组,但不能根据其键值(或任何其他条件)选择元素。
所以这个JSON对象更适合:
{
"cities": {
"Tokyo": {
"overview": {
"population": "19000000",
"area": "450000"
}
},
"Sydney": {
"overview": {
"population": "4500000",
"area": "6250000"
}
}
}
}
其次,您必须使用String
和Map
对象将JSON List
解析为结构。大多数JSON解析器都能够执行此操作。在此示例中,我使用noggit。
@Test
public void testSO_45787572() throws IOException {
final String json =
"{\n" +
" \"cities\": {\n" +
" \"Tokyo\": {\n" +
" \"overview\": {\n" +
" \"population\": \"19000000\",\n" +
" \"area\": \"450000\"\n" +
" }\n" +
" },\n" +
" \"Sydney\": {\n" +
" \"overview\": {\n" +
" \"population\": \"4500000\",\n" +
" \"area\": \"6250000\"\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
assertEquals("The population of Tokyo is: 19000000", Mustache.compiler()
.compile(new StringReader("The population of Tokyo is: {{cities.Tokyo.overview.population}}"))
.execute(new ObjectBuilder(new JSONParser(json)).getObject())
);
}