![](/img/trans.png)
[英]How to create a multiple JSON objects inside an Array in java selenium
[英]How to create a json array with multiple objects java spring boot
我已經創建了具有最多評論和最高評分游戲的用戶,但堅持如何為 average_likes_per_game 創建 json 數組。 我想做一些看起來像這樣的東西:
{
"user_with_most_comments": "Alison",
"highest_rated_game": "Uncharted 4",
"average_likes_per_game": [
{
"title": "Call of Duty, Infinite Warfare",
"average_likes": 4,
},
{
"title": "Uncharted 4",
"average_likes": 7,
}
]
}
目前它看起來像:
{ "user_with_most_comments": "Alison", "highest_rated_game": "Uncharted 4", "average_likes_per_game": "[\"Uncharted 4 \",\"7\",\"Call of Duty, Infinite Warfare \",\"7\"]" }
我可以看到我錯過了將平均喜歡數添加到與游戲相關的數字中。 即使使用 Gson setPrettyPrinting 東西,我似乎也無法正確格式化它。
我手頭的 average_likes_per_game 數據是一個包含游戲名稱的 map,平均喜歡反對它。 它只是將其轉換為這個 json 數組。
這是使用 Spring Boot 完成的,我試圖以漂亮的 json 格式一次返回所有內容
@RequestMapping(value = "/games/report", method = RequestMethod.GET)
public String getReport() throws IOException {
Map<String, String> report = new HashMap<>();
String highestRankedGame = gameService.findHighestRatedGame();
String userWithMostComments = gameService.findUserWithMostComments();
Map<String,String> averageLikesPerGame = gameService.findAverageLikesPerGame();
String likesToJsonArray = String.valueOf(gameService.convertLikesToJsonArray(averageLikesPerGame));
report.put("highest_rated_game",highestRankedGame);
report.put("user_with_most_comments", userWithMostComments);
report.put("average_likes_per_game",likesToJsonArray);
String jsonReport = gameService.convertReportToJson(report);
String finalJsonReport = gameService.makeMePretty(jsonReport);
return finalJsonReport;
}
查找平均喜歡每場比賽返回 map 的 2 個字符串,這樣它就不會導致問題被添加到最后的最終報告 map 中。 目前我的“convertLikesToJsonarray”非常糟糕,是我被困的地方
public JSONArray convertLikesToJsonArray(Map<String, String> averageLikesPerGame) throws JSONException {
JSONArray myArray = new JSONArray();
for(Map.Entry<String,String> entry : averageLikesPerGame.entrySet()) {
myArray.put(entry.getKey());
myArray.put(entry.getValue());
}
return myArray;
}
值得注意的是,我最后將最終報告轉換為 json,這可能會使數組變得復雜,因為我認為它不適合那個
@Override
public String convertReportToJson(Map<String, String> report) {
ObjectMapper mapper = new ObjectMapper();
String jsonArray = null;
try {
jsonArray = mapper.writeValueAsString(report);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return jsonArray;
}
String.valueOf(gameService.convertLikesToJsonArray(averageLikesPerGame));
您正在將其作為 json 中的單個值,而不是實際的 json。這就是為什么它在您的 JSON output 中全部轉義的原因。您也沒有展示您的漂亮打印方法,因此無法評論其中的 output。 嘗試
//Use object instead of String as you want nested objects in output
Map<String, Object> report = new HashMap<>();
String highestRankedGame = gameService.findHighestRatedGame();
String userWithMostComments = gameService.findUserWithMostComments();
Map<String,String> averageLikesPerGame = gameService.findAverageLikesPerGame();
report.put("highest_rated_game",highestRankedGame);
report.put("user_with_most_comments", userWithMostComments);
//Add averageLikesPerGame directly to report without modifying
report.put("average_likes_per_game",averageLikesPerGame.entrySet());
String jsonReport = gameService.convertReportToJson(report);
return jsonReport;
和
public String convertReportToJson(Map<String, Object> report) {
ObjectMapper mapper = new ObjectMapper();
String jsonArray = null;
try {
//Don't need Gson, can use writerWithDefaultPrettyPrinter with Jackson which
//You are already using
jsonArray = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(report);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return jsonArray;
}
如果你想在帶有標簽的數組中映射值,那么你可以做這樣的事情
List<Map<String,String>> labelledAvgLikesPerGame =
averageLikesPerGame.entrySet().stream()
.map( entry ->
//Needs java 9+ for ofEntries
//You'll need to make new HashMap,put + return
// for java 8
Map.ofEntries(
Map.entry("title", entry.getKey()),
Map.entry("average_likes", entry.getValue())
)).collect(Collectors.toList());
report.put("highest_rated_game",highestRankedGame);
report.put("user_with_most_comments", userWithMostComments);
report.put("average_likes_per_game",labelledAvgLikesPerGame);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.