【问题标题】:Mustache-Java: How to get value in Map by keyMustache-Java:如何通过键在 Map 中获取值
【发布时间】:2017-08-20 23:12:24
【问题描述】:

我在 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}}"

【问题讨论】:

  • 你必须使用JMustache吗?例如,您可以使用 Jackson 库在一行中完成。

标签: java mustache


【解决方案1】:

首先,您的小胡子语法存在问题。 cities['Tokyo'] 无效。 cities 是一个数组。您可以遍历一个数组,但不能根据其键值(或任何其他条件)选择一个元素。

所以这个 JSON 对象更适合:

{
    "cities": {
        "Tokyo": {
            "overview": {
                "population": "19000000",
                "area": "450000"
            }
        },
        "Sydney": {
            "overview": {
                "population": "4500000",
                "area": "6250000"
            }
        }
    }
}

其次,您必须将 JSON String 解析为使用 MapList 对象的结构。大多数 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())
    );
}

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 2019-02-02
    • 2018-04-18
    • 2016-09-06
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2020-11-27
    相关资源
    最近更新 更多