Hei,
Miten konvertoin allaolevan JSONArrayn List<Object>:ksi?
JSONArray arr = new JSONArray(); while (projects.hasNext()) { Project project = (Project) projects.next(); try { JSONObject obj = new JSONObject() .put("avatar", avatar) .put("key", project.getKey()) .put("name",project.getName()) .put("type",projectTypeString+";"+icon) .put("username",projectlead) .put("versions", project.getKey()) .put("gantt", project.getKey()) .put("year", project.getKey()) .put("filtered", project.getKey()) .put("nonfiltered", project.getKey()); arr.put(obj); } catch (JSONException jerr) { jerr.printStackTrace(); System.out.println("Got an JSONException: " + jerr.getCause()); } }
Nyt olen onnistunut muutamaan tämän List<Object> mutoon mutta en saa mitenkään ajettua ks. listaa takisin JSONiksi.
Eli jos koodi on tämä niin miten saan Object projectfinal = projectsfinal.next(); muuttujasta ulos sen sisällä olevat arvot JSONObject objfinal muutujaan?
int projectcount = arr.length(); Gson gson = new Gson(); Type type = new TypeToken<List<Object>>() {}.getType(); List<Object> list = gson.fromJson(arr.toString(), type); Pageable<List> pageable = new Pageable(list); pageable.setPageSize(limitReq); pageable.setPage(pageRange); List pagelist = pageable.getListForPage(); Iterator projectsfinal = pagelist.iterator(); JSONArray arrfinal = new JSONArray(); while (projectsfinal.hasNext()) { Object projectfinal = projectsfinal.next(); Field[] projectfields = projectfinal.getClass().getDeclaredFields(); for (int i=0; i<projectfields.length; i++) { try { System.out.println(projectfields[i].getName() + " - " + projectfields[i].get(projectfinal)); } catch (IllegalAccessException err) { err.printStackTrace(); System.out.println("Got an IllegalAccessException: " + err.getCause()); } } try { avt = projectfinal.getClass().getField("avatar").toString(); } catch (NoSuchFieldException err) { err.printStackTrace(); System.out.println("Got an NoSuchFieldException: " + err.getCause()); avt = ""; } try { JSONObject objfinal = new JSONObject() .put("avatar", avt) .put("key", "") .put("name", "") .put("type", "") .put("username", "") .put("versions", "") .put("gantt", "") .put("year", "") .put("filtered", "") .put("nonfiltered", ""); arrfinal.put(objfinal); } catch (JSONException jerr) { jerr.printStackTrace(); System.out.println("Got an JSONException: " + jerr.getCause()); } }
Ei varmaan kannata käyttää geneeristä Object-tyyppiä, jos haluat oikeasti tehdäkin datalla jotain.
Juu muutin Object-tyypin JSONArrat-tyypiksi.
Tein muutoksia koodiin mutta allaoleva koodi tulostaa tyhjän JSON-koodin:
while (projectsfinal.hasNext()) { JSONArray projectfinal = (JSONArray) projectsfinal.next(); try { JSONObject objfinal = new JSONObject() .put("avatar", projectfinal.getJSONObject(0)) .put("key", projectfinal.getJSONObject(1)) .put("name", projectfinal.getJSONObject(2)) .put("type", projectfinal.getJSONObject(3)) .put("username", projectfinal.getJSONObject(4)) .put("versions", projectfinal.getJSONObject(5)) .put("gantt", projectfinal.getJSONObject(6)) .put("year", projectfinal.getJSONObject(7)) .put("filtered", projectfinal.getJSONObject(8)) .put("nonfiltered", projectfinal.getJSONObject(9)); arrfinal.put(objfinal); } catch (JSONException jerr) { jerr.printStackTrace(); System.out.println("Got an JSONException: " + jerr.getCause()); } }
Sain nyt koodin toimimaan lukemalla tätä: https://sites.google.com/site/gson/gson-user-guide
Eli siis tuo yllä oleva while-silmukka onkin aivan turha vaan riittää komento:
String jsonOutput = gson.toJson(pagelist)
Niin ja alla oleva pitää olla näin:
Gson gson = new Gson(); Type type = new TypeToken<List<Object>>() {}.getType(); List<Object> list = gson.fromJson(arr.toString(), type);
Tai muuten tulee just tyhjää dataa.
Yritin jo aiemmin sanoa sulle, että älä käytä geneeristä Object-tyyppiä, kun tiedät jo valmiiksi, mitä tyyppiä funktiot oikeasti palauttavat. Sitten lisäsit koodiisi jonkin tyhmän castauksen Objectista haluamaasi tyyppiin. Lue tiedot nyt vaan suosiolla suoraan oikeantyyppiseen muuttujaan, niin suorituskykykin on parempi ja saat turhia koodirivejä pois.
List<MyType> = gson.fromJson(arr.toString(), ...);
Ketään ei näytä kiinnostavan vastailla näihin kysymyksiin, kun sinuakaan ei näytä kiinnostavan perehtyä edes javan alkeisiin...
The Alchemist kirjoitti:
Ketään ei näytä kiinnostavan vastailla näihin kysymyksiin, kun sinuakaan ei näytä kiinnostavan perehtyä edes javan alkeisiin...
On kyllä kiinnostusta perehtyä Javan alkeisiin mutta se on vaikea kun en tiedä missä olisi perusteet API-dokumentatioiden lukemiseen. Meille datanomi- ja tradenomi-koulussa opettiin vain PHP/MySQL-koodausta mutta ei Javaa. Haluasin mennä TAKKhon opiskelemaan ohjelmoijan erikoisammattitutkinnon (koska siellä opetetaqan Javaa) mutta en voi koska oppisopimuksella se maksaa joku 50 € ja ilman oppisopimusta n. 900 €. Oppisoppimuksella en pääse ja ilman oppisopimusta menee hiukan liian kalliiksi koko homma.
Mutta yleensä olen oppinut sen, että hyvin usein saan koodin kuitekin toimimaan kuten pitää kun tappelee tarpeeksi ja senkin, että monesti saan koodin toimimaan ilman apuja eli siis näiden kysymysten esittäminen jää monesti turhaksi.
Minä olen aloittanut itsekin ihan vaan lukemalla nettiä ja api-dokumentaatioita. Tässä näyttää kuitenkin paikoin olevan ongelmana se, että missään vaiheessa et pysähdy ajattelemaan, että mitä olet tekemässä. Totta kai itsekin välillä teen asioita aivan hirveän näköisellä tavalla ja myöhemmin tajuan virheeni ja kirjoitan koodin uusiksi, mutta alkuvaiheessa pitää olla huolellisempi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.