deserialisiert ein JSON-Objekt mit mehreren Elementen drin

Ich versuche zu Deserialisieren (mit gson) ein JSON-Objekt, das aussieht wie dieses:

        "attachments": {
            "40": {
                "ID": 40,
                "URL": "http:\/\/drewmore4.files.wordpress.com\/2013\/02\/wreckit.jpg",
                "guid": "http:\/\/drewmore4.files.wordpress.com\/2013\/02\/wreckit.jpg",
                "mime_type": "image\/jpeg",
                "width": 287,
                "height": 400
            },
            "3": {
                "ID": 3,
                "URL": "http:\/\/drewmore4.files.wordpress.com\/2013\/02\/frankenweenie2bposter.jpg",
                "guid": "http:\/\/drewmore4.files.wordpress.com\/2013\/02\/frankenweenie2bposter.jpg",
                "mime_type": "image\/jpeg",
                "width": 273,
                "height": 400
            }
    },

Wie kann ich das umgehen? Ich weiß gar nicht, was zu nennen dies - Es gibt mehrere "Elemente" sind hier vertreten, aber es ist nicht ein array. Wenn ich versuche zu Deserialisieren es als ein array, das Programm stürzt ab, auf eine "Erwartete Begin_Array aber gefunden Begin_Object" Ausnahme. Wenn ich versuche zu Deserialisieren es als ein Starkes Objekt (siehe Klasse unten), das Programm läuft aber die Felder alle null zurück.

Hier ist die Klasse, die ich habe versucht, die Karte an:

class Attachment {
int ID;
String URL;
}

den vollständigen JSON-Datei kann gesehen werden hier:

EDIT: GELÖST.

@Wahrnehmung die Lösung im Grunde arbeitete. Es war kompliziert durch die Tatsache, dass dieses "element" (würde noch gerne wissen, was diese multiple-entry - /non-array mit json-element) eingebettet ist in einen größeren json-Objekt enthält ein array. Wieder, diese JSON ist nicht mein design - es kommt aus der WordPress-REST-API, und (wie @Wahrnehmung angedeutet), ich denke, das Problem, das ich habe zeigt ein design-Fehler in es - nämlich, dass die Anlagen-element sollte ein array, anstatt ein einzelnes Objekt. Dennoch,

Dennoch, wenn schon mal jemand braucht Deserialisieren das Ergebnis einer Abfrage für alle Beiträge, die auf einer bestimmten Website, die diese API nutzen, und weiterer Bedarf Zugriff auf die Anhänge, auf jeden post hier ist, wie Sie es tun:

  private class getAll extends AsyncTask <Void, Void, JSONObject> {
    private static final String url = "https://public-api.wordpress.com/rest/v1/sites/drewmore4.wordpress.com/posts/";
    @Override
    protected JSONObject doInBackground(Void... params) {

        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        httpget.addHeader("accept", "application/json");
        JSONObject returned = new JSONObject();
        HttpResponse response;

        try {
            response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                InputStream instream = entity.getContent();
                String result= convertStreamToString(instream);

                returned =new JSONObject(result);                   
                instream.close();
            }
        } 
        catch (ClientProtocolException | IOException | JSONException e) { e.printStackTrace();} 

        return returned;
    }

        @Override
    protected void onPostExecute (JSONObject returned){
        Gson gson = new Gson();

//posts is the element within the JSONObject that is an array of post objects
        try {
        JSONArray posts = returned.getJSONArray("posts");

        for (int curr = 0; curr < posts.length(); curr++){
            String s = posts.get(curr).toString();

            Article a = gson.fromJson(s, Article.class);

            JSONObject attachments = new JSONObject(s).getJSONObject("attachments");
            final Iterator<String> keys = attachments.keys();
               while(keys.hasNext()) {
                    final String key = keys.next();
                    a.attached.add(gson.fromJson(attachments.getJSONObject(key).toString(), Attachment.class));
                }   
               stories.add(a);
        }

            } catch (JSONException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
InformationsquelleAutor awqueous | 2013-02-25
Schreibe einen Kommentar