gpt4 book ai didi

json - 在 Play 中,渲染 JSON 时可以使用匿名类型和/或对象初始值设定项吗?

转载 作者:行者123 更新时间:2023-12-01 05:37:48 25 4
gpt4 key购买 nike

我正在编写一个 Play 应用程序,它将有几十个返回 JSON 的 Controller 操作。每个 JSON 结果的格式略有不同,由一些原语构成。

我想避免创建一个 Java 类来保存每个操作方法的返回类型,因此目前我使用的是 HashMap,如下所示:

// used to populate the filters for an iphone app
public static void filters()
{
// get four lists from the database
List<Chef> chefs= Chef.find("order by name asc").fetch();
List<Cuisine> cuisines = Cuisine.find("order by name asc").fetch();
List<Meal> meals = Meal.find("order by name asc").fetch();
List<Ingredient> ingredients = Ingredient.find("order by name asc").fetch();
// return them as JSON map
Map<String,Object> json = new HashMap<String,Object>();
json.put("chefs", chefs);
json.put("cuisines", cuisines);
json.put("meals", meals);
json.put("ingredients", ingredients);
renderJSON(json);
}

这将返回如下所示的 JSON,这正是我想要的:
{ 
"chefs": [{},{},...{}],
"cuisines": [{},{},...{}],
"meals": [{},{},...{}],
"ingredients": [{},{},...{}]
}

我觉得 构造 HashMap 的语法是多余的 .我没有大量的 Java 经验,所以我与 C# 进行比较,它让我使用带有对象初始值设定项的匿名类型,以减少代码,如下所示:
return Json(new
{
chefs = chefs,
cuisines = cuisines,
meals = meals,
ingredients = ingredients
});

Java/Play 世界中有没有什么东西能让我更紧凑地编写这种代码?

最佳答案

Java 中没有与 C# 结构完全等效的结构,但是您可以创建一个匿名对象并使用下图所示的习惯用法对其进行初始化:

public static void filters()
{
renderJSON(new HashMap<String,Object>(){{

// get four lists from the database
List<Chef> chefs= Chef.find("order by name asc").fetch();
List<Cuisine> cuisines = Cuisine.find("order by name asc").fetch();
List<Meal> meals = Meal.find("order by name asc").fetch();
List<Ingredient> ingredients = Ingredient.find("order by name asc").fetch();

// return them as JSON map
put("chefs", chefs);
put("cuisines", cuisines);
put("meals", meals);
put("ingredients", ingredients);

}});
}

(您可以将四个列表声明放在匿名类型初始值设定项之外,但随后您需要将它们声明为 final。)

关于json - 在 Play 中,渲染 JSON 时可以使用匿名类型和/或对象初始值设定项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com