Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Java: JSONArray -> List<Object>

Sivun loppuun

walkout_ [27.07.2017 19:35:11]

#

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());
                    }

}

walkout_ [28.07.2017 11:16:56]

#

Nyt olen onnistunut muutamaan tämän List<Object> mutoon mutta en saa mitenkään ajettua ks. listaa takisin JSONiksi.

walkout_ [28.07.2017 17:29:27]

#

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());
				}

        }

The Alchemist [28.07.2017 20:04:11]

#

Ei varmaan kannata käyttää geneeristä Object-tyyppiä, jos haluat oikeasti tehdäkin datalla jotain.

walkout_ [29.07.2017 02:31:10]

#

Juu muutin Object-tyypin JSONArrat-tyypiksi.

walkout_ [29.07.2017 12:01:01]

#

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());
				}

        }

walkout_ [30.07.2017 20:32:57]

#

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.

The Alchemist [30.07.2017 20:55:30]

#

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...

walkout_ [30.07.2017 21:17:16]

#

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.

The Alchemist [05.08.2017 10:32:14]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta