# JSONObject Reihenfolge der Werte?



## jarobi (1. Mrz 2012)

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}*



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

			}
```


----------



## HoaX (1. Mrz 2012)

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.


----------



## BoBoHelp (3. Mrz 2012)

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:

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


----------



## gladiator09 (12. Jan 2013)

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


----------



## Robokopp (12. Jan 2013)

ich würde GSon nehmen, da kannst du einfach die Reihenfolge in der toString Methode definieren


----------

