Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JSON Wert zufügen (https://www.delphipraxis.net/209988-json-wert-zufuegen.html)

geldis 15. Feb 2022 08:14

JSON Wert zufügen
 
Hallo allerseits.

Ich hatte schon mal so meine Schwierigkeiten mit JSON und da wurde mir ja prima geholfen.
Jetzt ein unerwartetes neues das hoffentlich letzte Problem . Im Netz und hier und da habe ich gesucht, aber als Kind der XML Welt nur unverständliches Zeug gefunden. Folgende JSON:

Code:
{
  "Version": "1",
  "ID": "Zeptor",
  "IncompatibleIds": ["Jokola"],
  "Dependent": null,
  "Lapforce": {
    "English": "much",
    "French": null,
    "German": "Viel",
    "Italian": null,
    "Japanese": null,
    "Korean": null,
    "Polish": null,
    "Russian": null,
    "Spanish": null,
    "Taiwanese": null
  },
  "Name": "Turandot",
  "Contact": "",
  "Image" : null
}
Ich muss zur Node "Lapforce" schlicht die Sprache Czech - also "Czech": null, - hinzufügen, einfügen, anpappen. Mehr nicht. Kann das jemand mit den Bordmitteln von Delphi 10.4 ausführen?

Ich brauche das nur diese eine Mal und dafür dann JSON studieren ........:(

geldis

Union 15. Feb 2022 08:46

AW: JSON Wert zufügen
 
Wenn das Objekt als TJSONValue vorliegt:
Delphi-Quellcode:
var LValue : TJSONValue;
LValue := TJSONObject.ParseJSONValue(<Der JSON String>);
TJSONObject(AValue.FindValue('Lapforce')).AddPair('Czech', TJSONNull.Create);

Uwe Raabe 15. Feb 2022 08:51

AW: JSON Wert zufügen
 
Zitat:

Zitat von geldis (Beitrag 1502209)
Ich brauche das nur diese eine Mal

Dieser Satz ist vermutlich für einen Großteil des schlechten Codes auf der Welt mitverantwortlich. :-D

geldis 15. Feb 2022 10:04

AW: JSON Wert zufügen
 
@Union

besten Dank, klappt prima. Jetzt weiß ich auch warum das Pair heißt.

Und natürlich bei meinem Glück kommt dann noch was:
Code:
{
"Version": "1",
"ID": "Zeptor",
"IncompatibleIds": ["Jokola"],
"Dependent": null,
"Lapforce": {
"English": "much",
"French": null,
"German": "Viel",
"Italian": null,
"Japanese": null,
"Korean": null,
"Polish": null,
"Russian": null,
"Spanish": null,
"Taiwanese": null
},
"Score": [
{
"English": "much",
"French": null,
"German": "Viel",
"Italian": null,
"Japanese": null,
"Korean": null,
"Polish": null,
"Russian": null,
"Spanish": null,
"Taiwanese": null
}
],
"Name": "Turandot",
"Contact": "",
"Image" : null
}

</Code>

Die Node Score ist mit eckigen Klammern versehen, vermutlich also sowas wie ein Array. Er fügt den "Czech" Wert dazu, NICht die eckige Klammer. Was jetzt wenn ich nochmal fragen darf.

geldis


@UweRaabe

Danke für die Hilfe.

Union 15. Feb 2022 10:23

AW: JSON Wert zufügen
 
Die TJSONValue Werte liegen in einem TJSONArray vor.

himitsu 15. Feb 2022 10:28

AW: JSON Wert zufügen
 
oder der rechte Teil (Value) vom Pair

geldis 15. Feb 2022 16:32

AW: JSON Wert zufügen
 
Nach absolviertem Broterwerb : Da bin ich wieder.

Also ein Array, sehr schön. Am Beispiel oben orientiert würde ich also ein TJSONArray deklarieren

Delphi-Quellcode:
Var
var LValue : TJSONValue;
KArray : TJSonArray;

....

LValue := TJSONObject.ParseJSONValue(<Der JSON String>);
KArray := TJsonArray(LValue.FindValue('Score');
Jetzt habe ich eine Array. Und dann bin ich mal wieder am Ende.

geldis

himitsu 15. Feb 2022 17:00

AW: JSON Wert zufügen
 
Du willst kein Array (viele Values), sondern ein Object (viele Pairs mit Name+Value) haben.

geldis 16. Feb 2022 07:12

AW: JSON Wert zufügen
 
Moin Moin.

Nützt mir jetzt auch nichts. Ich kriege den Bogen nicht raus. :roll:

geldis

Union 16. Feb 2022 08:20

AW: JSON Wert zufügen
 
Auf die einzelnen TJSONValue im TJSONArray greifst Du über die Get - Methode zu. Die erhaltenen Objekte verarbeitest Du analog mit AddPair.

Ich kann Dir nur empfehlen, dich in die Delphi JSON Frameworks einzuarbeiten. Falls Du künftig noch länger programmieren wirst, kommst Du nämlich um JSON (und u.U. BSON, Protocol Buffers etc.) nicht herum.

geldis 16. Feb 2022 11:11

AW: JSON Wert zufügen
 
In meiner Gruppe hier haben für für jeden Berecih eine Spezialistn. Ich amüsiere mich mit Fortran, Cobol und XML (IT Studium 1988), einer mit DirectX, einer mit SQL, einer mit SAP+JSON usw. Und ausgerechnet der JSON Mensch ist krank, sonst hätte ich hier gar nicht gefragt. Und für das was wir hier machen brauchten wir JSON bisher nur in Extremfällen. Insofern lasse ich das dann links liegen.

Mir erschließt sich das Gefummel mit Objekten und Dutzenden von Typen nicht. Und ich sehe keinen Vorteil gegenüber XML.

Naja, ich lass das jetzt mal alles liegen und frage auch besser nicht mehr. Allein der Kommentar von Herrn Raabe hat mit schon gereicht. Und rumrätseln mag ich auch nicht.

geldis

Union 16. Feb 2022 11:29

AW: JSON Wert zufügen
 
Zitat:

Zitat von geldis (Beitrag 1502292)
Und rumrätseln mag ich auch nicht.

Wir helfen ja gerne. Natürlich fällt das leichter wenn auch ein Minimum an Eigeninitiative erkennbar ist. Ich habe die grundlegende Vorgehensweise beschrieben, der REST 8-) sollte bei Vorliegen der Dokumentation nicht schwer zu erarbeiten sein.

Auch COBOL unterstützt JSON inzwischen direkt in den meisten Dialekten (z.b. IBM, MF mit json parse into). Du könntest also sogar deine "Hauptsprache" dafür verwenden.

Uwe Raabe 16. Feb 2022 11:33

AW: JSON Wert zufügen
 
Zitat:

Zitat von geldis (Beitrag 1502292)
Allein der Kommentar von Herrn Raabe hat mit schon gereicht.

Das war eher als Ermunterung oder Ansporn etwas Neues zu lernen gedacht. Tut mir leid, wenn das falsch rübergekommen ist.

creehawk 16. Feb 2022 15:21

AW: JSON Wert zufügen
 
Moin Moin.

Kann nicht jemand mal geldis die entsprechenden Zeilen hier posten?

Ich hatte bisher das Forum auch und gerade als Hilfe verstanden, quasi wie ein Handbuch. Sicher ist der Gedanke des Ansporns und Motivation auch ein gute Sache. Aber aus meiner Sicht kann man das auch übertreiben.
Seinerzeit hatte ich hier echt Probleme mit DDSToPDF (DirectDrawSurface). Allerlei Tipps aus der Community haben mich dann tatsächlich motiviert. Mit Hilfe eines Spezialisten habe ich dann die Sache gelöst und einiges gelernt. Aber ich bin hier aus Hobby unterwegs.

geldis hat ja offensichtlich versucht die Sache zu lösen, aber auch ich kenne des Brett vor dem Kopf (jedenfalls die Maserung). Dummerweise habe ich keine Ahnung von JSON sonst würde ich das jetzt aufklären.

Die JSON ist als Beispiel ja weiter oben vorhanden, kann mal jemand so freundlich sein?

creehawk

Union 16. Feb 2022 17:20

AW: JSON Wert zufügen
 
Hier das funktionierende Codefragment.
Delphi-Quellcode:
uses
  System.JSON;

const
  JSONDATA =
    '{"Version":"1","ID":"Zeptor","IncompatibleIds":["Jokola"],"Dependent":null,' +
    '"Lapforce":{"English":"much","French":null,"German":"Viel","Italian":null,' +
    '"Japanese":null,"Korean":null,"Polish":null,"Russian":null,"Spanish":null,' +
    '"Taiwanese":null},"Score":[{"English":"much","French":null,"German":' +
    '"Viel","Italian":null,"Japanese":null,"Korean":null,"Polish":null,' +
    '"Russian":null,"Spanish":null,"Taiwanese":null}],"Name":"Turandot","Contact":"","Image":null}';

procedure ProcessJSON;
  procedure InsertCzech(AObject : TJSONValue);
  begin
    TJSONObject(AObject).AddPair('Czech', TJSONNull.Create);
  end;

  var
     LData : TJSONValue;
     LArray : TJSONArray;
     LItem : TJSONValue;
begin
  LData := TJSONObject.ParseJSONValue(JSONDATA);
  LItem := LData.FindValue('Lapforce');
  InsertCzech(LItem);
  LArray := TJsonArray(LData.FindValue('Score'));
  for LItem in LArray do
    InsertCzech(TJSONObject(LItem));
end;

geldis 17. Feb 2022 05:13

AW: JSON Wert zufügen
 
Guten Morgen.

@Union Vielen und herzlichen Dank.

@creehawk Danke.

geldis


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz