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