从JSON获取数据

我正试图从这个JSON字符串中获取值,但我很难实现这一点。

{"DebugLogId":"1750550","RequestId":"17505503","Result": {"Code":"","DebugLogId":"1750550","Message":""}, "Suggestions":[ {"Ranking":"1","Score":"60","Title":"This is a test message 1"}, {"Ranking":"2","Score":"60","Title":"This is a test message 2"} ]} 

在“建议”中访问数据最简单的方法是什么? 我正在使用GSON模块。 理想情况下,我想将它全部放在HashMap中。

感谢您的任何帮助和/或建议!

谢谢你的帮助!

希望这可以帮助:

App.java:

 package sg.java.play_sof_json_6596072; import com.google.gson.Gson; public class App { public static void main(String[] args) { Gson gson = new Gson(); String jsonString = "{\"DebugLogId\":\"1750550\",\"RequestId\":\"17505503\",\"Result\":{\"Code\":\"\",\"DebugLogId\":\"1750550\",\"Message\":\"\"},\"Suggestions\":[{\"Ranking\":\"1\",\"Score\":\"60\",\"Title\":\"This is a test message 1\"},{\"Ranking\":\"2\",\"Score\":\"60\",\"Title\":\"This is a test message 2\"}]}"; Debug obj = (Debug) gson.fromJson(jsonString, Debug.class); System.out.println(obj.getSuggestionList().get(1).getTitle()); } } 

Debug.java:

 package sg.java.play_sof_json_6596072; import java.util.List; import com.google.gson.annotations.SerializedName; public class Debug { @SerializedName("DebugLogId") private String debugLogId; @SerializedName("RequestId") private String requestId; @SerializedName("Result") private Result result; @SerializedName("Suggestions") private List suggestionList; /** * @return the debugLogId */ public final String getDebugLogId() { return this.debugLogId; } /** * @param debugLogId the debugLogId to set */ public final void setDebugLogId(String debugLogId) { this.debugLogId = debugLogId; } /** * @return the requestId */ public final String getRequestId() { return this.requestId; } /** * @param requestId the requestId to set */ public final void setRequestId(String requestId) { this.requestId = requestId; } /** * @return the result */ public final Result getResult() { return this.result; } /** * @param result the result to set */ public final void setResult(Result result) { this.result = result; } /** * @return the suggestionList */ public final List getSuggestionList() { return this.suggestionList; } /** * @param suggestionList the suggestionList to set */ public final void setSuggestionList(List suggestionList) { this.suggestionList = suggestionList; } } 

Result.java:

 package sg.java.play_sof_json_6596072; import com.google.gson.annotations.SerializedName; public class Result { @SerializedName("Code") private String code; @SerializedName("DebugLogId") private String debugLogId; @SerializedName("Message") private String messahe; /** * @return the code */ public final String getCode() { return this.code; } /** * @param code the code to set */ public final void setCode(String code) { this.code = code; } /** * @return the debugLogId */ public final String getDebugLogId() { return this.debugLogId; } /** * @param debugLogId the debugLogId to set */ public final void setDebugLogId(String debugLogId) { this.debugLogId = debugLogId; } /** * @return the messahe */ public final String getMessahe() { return this.messahe; } /** * @param messahe the messahe to set */ public final void setMessahe(String messahe) { this.messahe = messahe; } } 

Suggestion.java:

 package sg.java.play_sof_json_6596072; import com.google.gson.annotations.SerializedName; public class Suggestion { @SerializedName("Ranking") private String ranking; @SerializedName("Score") private String score; @SerializedName("Title") private String title; /** * @return the ranking */ public final String getRanking() { return this.ranking; } /** * @param ranking the ranking to set */ public final void setRanking(String ranking) { this.ranking = ranking; } /** * @return the score */ public final String getScore() { return this.score; } /** * @param score the score to set */ public final void setScore(String score) { this.score = score; } /** * @return the title */ public final String getTitle() { return this.title; } /** * @param title the title to set */ public final void setTitle(String title) { this.title = title; } } 

我建议你使用flexjson库http://flexjson.sourceforge.net/恕我直言,它更简单实用的库。 我第一次使用GSON,但后来将我的所有项目都改为flexjson而不是GSON。

在android中使用标准的json类 :

 JSONObject o = new JSONObject("your string"); JSONArray a = o.getJSONArray("Suggestions"); int i = 0; while ( i < a.length()) { o = a.getJSONObject(i); //do something with o, like o.getString("Title") ... ++i; } 

理想情况下,我想将它全部放在HashMap中。

如果您可以切换库, jackson只需一行代码即可实现。

 Map map = new ObjectMapper().readValue(json, Map.class); 

这会将任何JSON对象反序列化为仅由Java SE组件组成的HashMap 。 我还没有看到另一个可以做到这一点的Java-to / from-JSON库。

使用Gson可以实现相同的function,但它需要更多的代码行。 这是一个这样的解决方案。

 JsonElement je = new JsonParser().parse(json); JsonObject jo = je.getAsJsonObject(); Map map = createMapFromJsonObject(jo); // ... static Map createMapFromJsonObject( JsonObject jo) { Map map = new HashMap(); for (Entry entry : jo.entrySet()) { String key = entry.getKey(); JsonElement value = entry.getValue(); map.put(key, getValueFromJsonElement(value)); } return map; } static Object getValueFromJsonElement(JsonElement je) { if (je.isJsonObject()) { return createMapFromJsonObject(je.getAsJsonObject()); } else if (je.isJsonArray()) { JsonArray array = je.getAsJsonArray(); List list = new ArrayList(array.size()); for (JsonElement element : array) { list.add(getValueFromJsonElement(element)); } return list; } else if (je.isJsonNull()) { return null; } else // must be primitive { JsonPrimitive p = je.getAsJsonPrimitive(); if (p.isBoolean()) return p.getAsBoolean(); if (p.isString()) return p.getAsString(); // else p is number, but don't know what kind String s = p.getAsString(); try { return new BigInteger(s); } catch (NumberFormatException e) { // must be a decimal return new BigDecimal(s); } } } 

(我从我的博客文章http://programmerbruce.blogspot.com/2011/06/gson-v-jackson.html复制了这段代码。)