Autor |
Beitrag |
jackie05
Beiträge: 357
|
Verfasst: Di 16.01.18 22:34
Hallo,
ich versuche irgendwie ein 2D Array in einem JsonArray hinzuzufügen, leider weiss ich nicht genau, wie ich das hinbekommen kann.
So soll das JsonArray z.B. aussehen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| "tileItems" : [ [0,0,0,0,1,0,0,0,0], [0,0,0,2,2,0,0,0,0], [0,0,0,2,2,2,0,0,0], [0,0,2,2,2,2,0,0,0], [0,0,2,2,2,2,2,0,0], [0,2,2,2,2,2,2,0,0], [0,2,2,2,2,2,2,2,0], [2,2,2,2,2,2,2,2,0], [2,2,2,2,2,2,2,2,2] ] |
Hier ist mal mein Code:
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: 34: 35: 36: 37: 38: 39: 40:
| var i, j, x, y: integer; JSONArrayTypeItems: TJSONArray; JSONObjectTypeItems: TJSONObject; JSONArrayLevelItems: TJSONArray; JSONObjectLevelItems: TJSONObject; JSONArrayTilesItems: TJSONArray; JSONObjectTilesItems: TJSONObject; JSONObjectResponse: TJSONObject; begin JSONArrayTypeItems := TJSONArray.Create; JSONObjectResponse := TJSONObject.Create;
for i := 0 to High(TypeArray) do begin JSONObjectTypeItems := TJSONObject.Create; JSONObjectTypeItems.AddPair('title', TypeArray[i].Title); JSONObjectTypeItems.AddPair('description', TypeArray[i].Description);
JSONArrayLevelItems := TJSONArray.Create; for j := 0 to High(TypeArray[i].LevelArray) do begin JSONObjectLevelItems := TJSONObject.Create; JSONObjectLevelItems.AddPair('title', TypeArray[i].LevelArray[j].Title);
JSONArrayTilesItems := TJSONArray.Create; for y := 0 to High(TypeArray[i].LevelArray[j].TileArray) do begin JSONObjectTilesItems := TJSONObject.Create; for x := 0 to High(TypeArray[i].LevelArray[j].TileArray) do begin end; JSONArrayTilesItems.Add(JSONObjectTilesItems); end; JSONObjectLevelItems.AddPair('tileItems', JSONArrayTilesItems); JSONArrayLevelItems.Add(JSONObjectLevelItems); end; JSONObjectTypeItems.AddPair('levelItems', JSONArrayLevelItems); JSONArrayTypeItems.Add(JSONObjectTypeItems); end;
JSONObjectResponse.AddPair('typeItems', JSONArrayTypeItems); Memo1.Text := JSONObjectResponse.ToJSON; |
Ich weiss jetzt nicht, wie ich das in der for schleife bei x und y die JsonArrays so erstelle, das diese dann so hinzugefügt werden:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| "tileItems" : [ [0,0,0,0,1,0,0,0,0], [0,0,0,2,2,0,0,0,0], [0,0,0,2,2,2,0,0,0], [0,0,2,2,2,2,0,0,0], [0,0,2,2,2,2,2,0,0], [0,2,2,2,2,2,2,0,0], [0,2,2,2,2,2,2,2,0], [2,2,2,2,2,2,2,2,0], [2,2,2,2,2,2,2,2,2] ] |
Kann mir da Vielleicht jemand Weiterhelfen?
Ich bedanke mich schon mal im Voraus.
Gruss
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Mi 17.01.18 10:39
Für was brauchst du denn das JSON Objekt? Möchtest du mit diesem Objekt weiterarbeiten, oder brauchst du es nur zum speichern in eine Datei? Im letzterem Falle würde ich diesen String einfach selber generieren.
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
jackie05
Beiträge: 357
|
Verfasst: Mi 17.01.18 13:02
Danke erst mal für die Antwort.
Ich habe mir ein Spiel in Unity geschrieben und in Delphi habe ich dafür ein Level-Editor für mein Spiel erstellt um schneller Levels zu erstellen.
Beim Laden der Json Datei, kann ich so z.B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| jsonArrayTileItems := TJSONArray(jsonObjectLevelItem.Get('tileItems').JsonValue); SetLength(TypeArray[i].LevelArray[j].TileArray, jsonArrayTileItems.Count, jsonArrayTileItems.Count); for y := 0 to pred(jsonArrayTileItems.Count) do begin jsonObjectTileItem := TJSONObject(jsonArrayTileItems.Items[y]); jsonArrayTileItems2 := TJSONObject.ParseJSONValue(((jsonArrayTileItems as TJSONArray).Items[y] as TJSONValue).ToJSON) as TJSONArray;
for x := 0 to pred(jsonArrayTileItems2.Count) do begin TypeArray[i].LevelArray[j].TileArray[x][y].TileNr := StrToInt(jsonArrayTileItems2.Items[x].Value); end; end; |
dieses Array hier laden:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| "tileItems" : [ [0,0,0,0,1,0,0,0,0], [0,0,0,2,2,0,0,0,0], [0,0,0,2,2,2,0,0,0], [0,0,2,2,2,2,0,0,0], [0,0,2,2,2,2,2,0,0], [0,2,2,2,2,2,2,0,0], [0,2,2,2,2,2,2,2,0], [2,2,2,2,2,2,2,2,0], [2,2,2,2,2,2,2,2,2] ] |
Symbroson hat folgendes geschrieben : | Für was brauchst du denn das JSON Objekt? Möchtest du mit diesem Objekt weiterarbeiten, oder brauchst du es nur zum speichern in eine Datei? Im letzterem Falle würde ich diesen String einfach selber generieren. |
Ja, hier möchte ich diesen Array jetzt gerne so in einer JSON Datei speichern.
Ich werde es mal versuchen, diesen Array so in einem String zu generieren und diese dann in dem JSON Object mit hinzuzufügen.
Vielen Dank für die Hilfe.
Edit: Ich hab diesen Array jetzt so in einem String generiert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| TileString := '['; for y := 0 to High(TypeArray[i].LevelArray[j].TileArray) do begin TileString := TileString + '['; for x := 0 to High(TypeArray[i].LevelArray[j].TileArray) do begin TileString := TileString + IntToStr(TypeArray[i].LevelArray[j].TileArray[x][y].TileNr); if x < High(TypeArray[i].LevelArray[j].TileArray) then TileString := TileString + ','; end; TileString := TileString + ']'; if y < High(TypeArray[i].LevelArray[j].TileArray) then TileString := TileString + ','; end; TileString := TileString + ']'; JSONObjectLevelItems.AddPair('tileItems', TileString); |
Nur wie kann ich diesen String jetzt im JSON Object ohne Anführungszeichen anhängen?
Mit
Delphi-Quelltext 1:
| JSONObjectLevelItems.AddPair('tileItems', TileString); |
wird mir dieser Array als String in JSON Object angehängt.
Danke schon mal.
Gruss
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 17.01.18 13:52
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
jackie05
Beiträge: 357
|
Verfasst: Mi 17.01.18 14:33
Frühlingsrolle hat folgendes geschrieben : | Entweder mit der Funktion Delete() an der jeweiligen Position die Anführungszeichen entfernen, oder mit der Funktion StringReplace() die Anführungszeichen auf einmal durch einen leeren String ersetzen.
Die neueren Delphiversionen haben stringVariable.Replace() schon intus. |
Ja, das wäre auch eine Möglichkeit, bevor ich die Datei entgültig speicher, nach den Zeichen zu suchen und durch einen leeren String zu ersetzen.
Edit: Ich hab die String so ersetzt:
Delphi-Quelltext 1: 2:
| response := StringReplace(response, '"[', '[', [rfReplaceAll, rfIgnoreCase]); response := StringReplace(response, ']"', ']', [rfReplaceAll, rfIgnoreCase]); |
Würde ich nur nach Anführungszeichen suchen, dann würden noch andere Teile ersetzt werden.
Vielen Dank für die Hilfe, es funktioniert alles wie es soll.
Gruss
|
|
|