我有以下json
"notes": {"note": [ { "content": "Having wisdom teeth removed.", "from": "employee" }, { "content": "Get well soon", "from": "manager" } ]},
问题在于,价值价值也是
"notes": "",
要么
"notes": {"note": { "content": "This is a test note.", "from": "employee" }},
并将其存储在这些
public class Notes { @SerializedName ("note") public List<Note> note; } public class Note { @SerializedName ("content") public String content; @SerializedName ("from") public String from; }
我相信我通过这样做解决了不是数组而是单个对象的问题
public class Json { private static Gson gson; private static class MyNoteClassTypeAdapter implements JsonDeserializer<List<RequestsDTO.Note>> { public List<RequestsDTO.Note> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) { List<RequestsDTO.Note> vals = new ArrayList<RequestsDTO.Note>(); if (json.isJsonArray()) { for (JsonElement e : json.getAsJsonArray()) { vals.add((RequestsDTO.Note) ctx.deserialize(e, RequestsDTO.Note.class)); } } else if (json.isJsonObject()) { vals.add((RequestsDTO.Note) ctx.deserialize(json,RequestsDTO.Note.class)); } else { throw new RuntimeException("Unexpected JSON type: " + json.getClass()); } return vals; } } public static Gson getGson() { if (gson == null) { Type ListType = new TypeToken<List<RequestsDTO.Note>>() {}.getType(); GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(DateTime.class, new DateTimeSerializer()); builder.registerTypeAdapter(ListType, new MyNoteClassTypeAdapter()); gson = builder.create(); } return gson; } }
现在,当整个事情以字符串形式返回时,我仍然处于困境....
我们的想法是试图让"note"(从外地"notes" JSONObject)为JSONArray第一,如果抛出异常,这将意味着,没有"note" JSONArray进入"notes" JSONObject ,这将意味着"note"是JSONObject。用同样的方法,我们可以计算出状况时note场String。
"note"
"notes"
JSONObject
JSONArray
note
String
try { //String jsonString="{\"notes\": {\"note\": [{\"content\": \"Having wisdom teeth removed.\",\"from\": \"employee\" }, {\"content\": \"Get well soon\", \"from\": \"manager\"} ] }}"; //String jsonString="{\"notes\": { \"note\": {\"content\": \"This is a test note.\",\"from\": \"employee\"}}}"; String jsonString="{\"notes\": { \"note\": \"\"}}"; JSONObject jsonObject=new JSONObject(jsonString); JSONObject jsonObjectNotes=jsonObject.getJSONObject("notes"); try{ JSONArray jsonArrayNote=jsonObjectNotes.getJSONArray("note"); for (int i = 0; i < jsonArrayNote.length(); i++) { JSONObject jsonObject2= jsonArrayNote.getJSONObject(i); String stringContent=jsonObject2.getString( "content"); String stringFrom= jsonObject2.getString( "from"); Log.e(getClass().getName(), "content="+stringContent +"; from="+stringFrom); } } catch(JSONException e){ //that means that jsonObjectNotes has no jsonArray with name "notes" and "notes" is jsonObject try{ JSONObject jsonObject3=jsonObjectNotes.getJSONObject("note"); String stringContent=(String) jsonObject3.get( "content"); String stringFrom=(String) jsonObject3.get( "from"); Log.e(getClass().getName(), "content="+stringContent +"; from="+stringFrom); } catch(JSONException ex){ //that means that jsonObjectNotes has no jsonObject with name "notes" and "notes" is empty String String stringNote=jsonObjectNotes.getString("note") ; Log.e(getClass().getName(), "note is string ="+ stringNote); } } } catch (JSONException e) { e.printStackTrace(); }
在我的示例代码中,其他get操作也可能引发jsonExceptions,但是我想您已经明白了。
get