Autor Beitrag
billy01
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 08.09.16 13:46 
Hallo,

hier meine zweite Frage zum Thema JSON und Sortierung.

Gegeben ist folgendes:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
[
    {
      "Klasse": "05A",
      "Datum": "6-8-"
    },
    {
      "Klasse": "05D",
      "Datum": "6-8-"
    },
    {
      "Klasse": "05B",
      "Datum": "6-8-"
    },
    {
      "Klasse": "05C",
      "Datum": "6-8-"
    },
    {
      "Klasse": "06A",
      "Datum": "6-8-"
    },
    {
      "Klasse": "06A",
      "Datum": "7-8-"
    },
    {
      "Klasse": "10C",
      "Datum": "6-8-"
    },
    {
      "Klasse": "06B",
      "Datum": "6-8-"
    }]


Ich brauche es aber so, dass alle Klassen so sortiert sind: 05A, 05B, 06D, 06E usw. Das Datum des JSON-"Blocks" muss aber mitsortiert werden, zuerst käme dann der 6.8 (die Striche können ruhig da sein) und dann der 7.8.

Hätte hier jemand von euch eine Idee, wie das gehen könnte?

Desweiteren kommen manche Klassen für ein Datum doppelt vor, gibt es eine Methode, mit der ich solche "Duplikate" rausfiltern kann?

Danke!

Billy.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 08.09.16 14:56 
Wo willst du sortieren?

In der Datei ist die Reihenfolge unbedeutend es ist ja nur ein File. Aus der Json Perspektive ist eine Menge A,B zu B,A identisch. Es ist nichts anderes.
Wenn du irgendwo eine bestimmte Reihenfolge brauchst mußt du den Elementen die du im Json ~sortiert~ haben willst eine entsprechende Eigenschaften geben die die Reihenfolge beim Nutzer der Json Datei bestimmt. Du bräuchtest also neben denn Klasse und Datum Eigenschaften noch eine Positions/Sortierung Eigenschaft die z.B. eine fortlaufende Nummer enthält nach der du später sortieren kannst egal in welcher Reihenfolge di ein der Datei stehen.

Wenn der Nutzer der Json Datei außerhalb deines Einflusses liegt, du das Format nicht anpassen kannst aber diese Sortierung im File sein mußt hast du ein Problem. Die Json Bibliotheken werden die Reihenfolge eher zufällig bestimmen da der JSON Standard keine vorschreibt. Du könntest Glück haben das z.B. JSON.Net das im Moment in einer gewissen Reihenfolge macht du kannst aber nicht davon ausgehen das das in jeder zukünftigen Konstellation so bleibt. Da es undefiniert ist könnte sich bei Systemänderungen außerhalb deiner Kontrolle z.B. anderes .Net Framework Version, anderes OS, andere Hotfixes für Framework, OS das Verhalten anders sein.
billy01 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 08.09.16 15:34 
Okay, ich habe meiner Datei jetzt in jedem Block noch eine "ID" bestehend aus Klasse und Datum hinzugefügt. Beispiel: "ID": "05A6-8-"

Anhand der ID sollte das dann gehen oder?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 08.09.16 15:40 
Wenn über diese ID sinnvoll sortierbar ist ja.
billy01 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 08.09.16 16:19 
Ich habe jetzt beispielsweise das hier gefunden: stackoverflow.com/qu...ort-json-string-keys

Leider bringt mir das nicht viel, wie kann ich denn meine Datei in die markierte Lösung einlesen?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 08.09.16 22:23 
Dort werden die dem JSON entsprechenden Objekte im Speicher sortiert. Wie ich versucht habe zu erklären hat diese Sortierung nix oder nur zufällig was mit der Sortierung in der daraus entstehenden JSON Datei zu tun. Nur weil es auf Stackoverflow die akzeptierte Antwort ist heißt das nicht das die gut ist.

Wenn ich mal als Basis den von mir gezeigten Code in deinem anderen Thread nehme könntest du denn so sortieren.

ausblenden C#-Quelltext
1:
2:
var list = JsonConvert.DeserializeObject<List<Temp_Felder>>(File.ReadAllText(pathToSourceFile));
list = list.OrderBy(x => x.Datum).ThenBy(y => y.Klasse).ToList();


Das entspricht logisch dem was in dem verlinkten Beitrag passiert.
Möglicherweise serialisiert das JSON.Net dann auch zufällig in der Reihenfolge wenn man die Liste serialisiert. Damit das auch bei spätere Benutzung der Software auch so bleibt muss man halt kräftig Daumen drücken.
billy01 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 09.09.16 09:52 
Hallo Ralf,

es klappt jetzt.

Danke!