如何从Java返回的HTTP响应JSON中提取Suggestions的Text字段?
嘿,我来给你分享几个在Java里提取目标JSON中Suggestions数组内Text字段值的实用方案,都是日常项目里常用的:
方案1:用Jackson库(Spring项目首选)
Jackson是Java生态里最流行的JSON处理库之一,Spring框架默认也依赖它,结构化解析非常方便。
首先引入Maven依赖(用最新稳定版即可):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
先定义和JSON结构匹配的POJO类,让解析逻辑更清晰:
import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; // 最外层响应类 class TextResultResponse { @JsonProperty("LightGingerTheTextResult") private List<TextResultItem> resultItems; // Getter & Setter public List<TextResultItem> getResultItems() { return resultItems; } public void setResultItems(List<TextResultItem> resultItems) { this.resultItems = resultItems; } } // 单个结果项 class TextResultItem { private List<Suggestion> Suggestions; // Getter & Setter public List<Suggestion> getSuggestions() { return Suggestions; } public void setSuggestions(List<Suggestion> suggestions) { Suggestions = suggestions; } } // 建议项 class Suggestion { private String Text; // Getter & Setter public String getText() { return Text; } public void setText(String text) { Text = text; } }
接下来是解析提取的核心代码,注意加空值判断避免空指针:
import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; public class JacksonParserDemo { public static void main(String[] args) { String targetJson = "{ \"LightGingerTheTextResult\": [ { \"Confidence\": 4, \"From\": 0, \"LrnFrg\": null, \"LrnFrgOrigIndxs\": [], \"Mistakes\": [ { \"CanAddToDict\": false, \"From\": 0, \"To\": 0 } ], \"ShouldReplace\": true, \"Suggestions\": [ { \"LrnCatId\": 12, \"Text\": \"An\" }, { \"LrnCatId\": 45, \"Text\": \"A\" } ], \"To\": 0, \"TopLrnCatId\": 12, \"Type\": 3, \"UXFrgFrom\": 0, \"UXFrgTo\": 6 } ] }"; ObjectMapper objectMapper = new ObjectMapper(); List<String> suggestionTexts = new ArrayList<>(); try { TextResultResponse response = objectMapper.readValue(targetJson, TextResultResponse.class); if (response.getResultItems() != null && !response.getResultItems().isEmpty()) { TextResultItem firstItem = response.getResultItems().get(0); if (firstItem.getSuggestions() != null && !firstItem.getSuggestions().isEmpty()) { for (Suggestion s : firstItem.getSuggestions()) { if (s.getText() != null) { suggestionTexts.add(s.getText()); } } } } // 输出结果:[An, A] System.out.println(suggestionTexts); } catch (Exception e) { e.printStackTrace(); } } }
方案2:用Gson库(轻量灵活,适合快速开发)
Gson是Google出品的JSON库,语法简洁,支持无POJO的原生解析,适合临时场景。
先引入Maven依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
方式一:POJO结构化解析
可以复用上面的POJO类,直接解析:
import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; public class GsonPojoDemo { public static void main(String[] args) { String targetJson = "{ \"LightGingerTheTextResult\": [ { \"Confidence\": 4, \"From\": 0, \"LrnFrg\": null, \"LrnFrgOrigIndxs\": [], \"Mistakes\": [ { \"CanAddToDict\": false, \"From\": 0, \"To\": 0 } ], \"ShouldReplace\": true, \"Suggestions\": [ { \"LrnCatId\": 12, \"Text\": \"An\" }, { \"LrnCatId\": 45, \"Text\": \"A\" } ], \"To\": 0, \"TopLrnCatId\": 12, \"Type\": 3, \"UXFrgFrom\": 0, \"UXFrgTo\": 6 } ] }"; Gson gson = new Gson(); TextResultResponse response = gson.fromJson(targetJson, TextResultResponse.class); List<String> suggestionTexts = new ArrayList<>(); if (response.getResultItems() != null && !response.getResultItems().isEmpty()) { TextResultItem firstItem = response.getResultItems().get(0); if (firstItem.getSuggestions() != null && !firstItem.getSuggestions().isEmpty()) { for (Suggestion s : firstItem.getSuggestions()) { if (s.getText() != null) { suggestionTexts.add(s.getText()); } } } } System.out.println(suggestionTexts); } }
方式二:无POJO原生解析(适合临时需求)
如果不想定义POJO,可以直接遍历JSON节点:
import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.util.ArrayList; import java.util.List; public class GsonRawDemo { public static void main(String[] args) { String targetJson = "{ \"LightGingerTheTextResult\": [ { \"Confidence\": 4, \"From\": 0, \"LrnFrg\": null, \"LrnFrgOrigIndxs\": [], \"Mistakes\": [ { \"CanAddToDict\": false, \"From\": 0, \"To\": 0 } ], \"ShouldReplace\": true, \"Suggestions\": [ { \"LrnCatId\": 12, \"Text\": \"An\" }, { \"LrnCatId\": 45, \"Text\": \"A\" } ], \"To\": 0, \"TopLrnCatId\": 12, \"Type\": 3, \"UXFrgFrom\": 0, \"UXFrgTo\": 6 } ] }"; JsonObject root = JsonParser.parseString(targetJson).getAsJsonObject(); JsonArray resultArray = root.getAsJsonArray("LightGingerTheTextResult"); List<String> suggestionTexts = new ArrayList<>(); if (resultArray != null && resultArray.size() > 0) { JsonObject firstItem = resultArray.get(0).getAsJsonObject(); JsonArray suggestions = firstItem.getAsJsonArray("Suggestions"); if (suggestions != null && suggestions.size() > 0) { for (int i = 0; i < suggestions.size(); i++) { JsonObject suggestion = suggestions.get(i).getAsJsonObject(); suggestionTexts.add(suggestion.get("Text").getAsString()); } } } System.out.println(suggestionTexts); } }
方案3:Java原生JSON API(无需第三方依赖)
如果项目不能引入外部库,可以用Java 11+自带的javax.json API(需要引入API和实现依赖)。
Maven依赖:
<dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.1.4</version> </dependency>
解析代码:
import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonObject; import javax.json.JsonReader; import java.io.StringReader; import java.util.ArrayList; import java.util.List; public class NativeJsonDemo { public static void main(String[] args) { String targetJson = "{ \"LightGingerTheTextResult\": [ { \"Confidence\": 4, \"From\": 0, \"LrnFrg\": null, \"LrnFrgOrigIndxs\": [], \"Mistakes\": [ { \"CanAddToDict\": false, \"From\": 0, \"To\": 0 } ], \"ShouldReplace\": true, \"Suggestions\": [ { \"LrnCatId\": 12, \"Text\": \"An\" }, { \"LrnCatId\": 45, \"Text\": \"A\" } ], \"To\": 0, \"TopLrnCatId\": 12, \"Type\": 3, \"UXFrgFrom\": 0, \"UXFrgTo\": 6 } ] }"; List<String> suggestionTexts = new ArrayList<>(); try (JsonReader reader = Json.createReader(new StringReader(targetJson))) { JsonObject root = reader.readObject(); JsonArray resultArray = root.getJsonArray("LightGingerTheTextResult"); if (resultArray != null && !resultArray.isEmpty()) { JsonObject firstItem = resultArray.getJsonObject(0); JsonArray suggestions = firstItem.getJsonArray("Suggestions"); if (suggestions != null && !suggestions.isEmpty()) { for (int i = 0; i < suggestions.size(); i++) { JsonObject suggestion = suggestions.getJsonObject(i); suggestionTexts.add(suggestion.getString("Text")); } } } } System.out.println(suggestionTexts); } }
内容的提问来源于stack exchange,提问作者first
相关产品推荐
相关产品推荐

