JSONObject Reihenfolge der Werte?

jarobi

Mitglied
Ich hab grad das Problem wenn ich einen Json String vom Server bekomme und ich ihn dann einem JSONObject übergebe und auslese, eine völlig andere Reihenfolge habe. Ich weiss nicht ob dass an mir oder an der internen Implementierung solch eines Objektes liegt.

Zur Veranschaulichung:


So bekomm ich das vom Server:
{"Export":[
{"name":"Testdaten","data1":10,"data2":12,"data3":14,"data4":8,"data5":13},
{"name":"Testblabla","data1":7,"data2":8,"data3":16,"data4":10,"data5":3},
........
]
}
und so sieht es auch wenn ich es in ein JSONObject einlese(Teilauschnitt)
{"data1":10,"name":"Testdateb","data4":8,"data5":13,"data2":12,"data3":14}


Java:
		JSONObject oJSONObject;
		try {  
                        //jstring = JsonString vom Server. 
			oJSONObject = new JSONObject(jstring);
                        //Hier hole ich mir den Array -> Export[..]
			JSONArray recs = oJSONObject.getJSONArray("Export");

			for (int i = 0; i < recs.length(); ++i) {
                                // hier greife ich auf die einzelne Json-Datensätze zu. Sind hier aber schon in
                                // der falschen reihenfolge
				JSONObject rec = recs.getJSONObject(i);
				// das aber hier ist eigentlich egal.
				String[] nametest = rec.getNames(rec);
					 for (int a = 0; a < nametest.length; a++) {
					if (!(nametest[a].toString().equalsIgnoreCase("name"))) {
						System.out.println(rec.getString(nametest[a].toString()));
					}
				}

			}
 
Liegt mit Sicherheit an JSONObject. Was du da hast ist ja eine Map, und wennn JSONObject z.B. HashMap intern verwendet, dann ist keine feste Reihenfolge mehr gegeben.
 
Hallo,
ich weiß es nicht was für eine Version von JSON (jar) du nutzt, bei mir habe ich solche Probleme nicht - hier ein Beispiel:
Java:
String jsonTxt = "{Export:[{'name':'Testdaten','data1':10,'data2':12,'data3':14,'data4':8,'data5':13},{'name':'Testblabla','data1':7,'data2':8,'data3':16,'data4':10,'data5':3}]}";

        try{
            JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );
            JSONArray jsonArray = json.getJSONArray("Export");
            for(int i=0; i<jsonArray.size(); i++){
                JSONObject object = (JSONObject)jsonArray.get(i);
                System.out.println(object);
                JSONArray names = object.names();
                for(int j=0; j<names.size();j++){
                    System.out.println(names.get(j));
                }

            }
        }catch (Exception e){
            e.printStackTrace();
        }

Result:
{"name":"Testdaten","data1":10,"data2":12,"data3":14,"data4":8,"data5":13}
name
data1
data2
data3
data4
data5
{"name":"Testblabla","data1":7,"data2":8,"data3":16,"data4":10,"data5":3}
name
data1
data2
data3
data4
data5
 
Hi,

hab leider das gleiche Problem.

Welche JSON-lib verwendest du? org.json?

Ich hab nichdt mal einen JSONSerializer. Auf jeden Fall verwendet JSONObject intern eine HashMap. Gibt es eine Möglichkeit das auf eine LinkedHashMap umzustellen? Wahrscheinlich nicht oder?

LG,
Alex
 

Zurück
Oben