04. april 2022 - 17:14
Der er
16 kommentarer og 1 løsning
Delphi JSON data til string
Hej med jer. :) Er helt ny i dette så håber i vil tage godt imod det, jeg har har lidt problemer med at få disse data ind i forskellige edit. {"first_name":"Mikael","last_name":"Johansen","company":"","address_1":"ikke opgivet","address_2":"ikke opgivet","city":"ikke opgivet","state":"","postcode":"ikke opgivet","country":"DK","phone":"ikke opgivet"} Vil gerne have "first_name" i en "edit1.text (Michael)" og "last_name" i en "edit2.text (Johansen)" Nogle som kn hjælpe med lidt kode til det? :)
Annonceindlæg fra GlobalConnect
04. april 2022 - 20:43
#2
Hej arne. :) Som sagt er jeg ikke vildt meget inde i det, men har du en mere simpel kode til delphi?
05. april 2022 - 01:43
#3
Prøv og vis noget kode og forklar hvad der ikke virker, så kan vi sikkert give nogle gode råd.
05. april 2022 - 15:03
#4
Okay, jeg har fået hentet de navn data ud af JSON filen med denne kode: var JSonData : String; JSonObject : TJSonObject; JSonValue : TJSonValue; Name : String; Lastname : String; begin JSonData := MemoJSONText.Text; JSonObject := TJSonObject.ParseJSONValue(JSonData) as TJSonObject; try JSonValue := JSonObject.Get('billing').JSONValue; Name := JSonValue.GetValue<string>('first_name'); LastName := JSonValue.GetValue<string>('last_name'); finally JSonObject.Free; end; Edit1.Text := Name ; Edit2.Text := LastName ; Men hvordan får jeg så varene ud af denne JSON fil de er delt op i "id" nummer. Hvordan få jeg "name" og "quantity" ud af vare nummer 1 i en "edit1", og en "edit2" "line_items": [ { "id": 20294, "name": "Arduino Uno R3 Chip", "product_id": 257, "variation_id": 0, "quantity": 1, "tax_class": "", "subtotal": "68.00", "subtotal_tax": "17.00", "total": "68.00", "total_tax": "17.00", "taxes": [ { "id": 1, "total": "17", "subtotal": "17" } ], "meta_data": [ { "id": 179468, "key": "_woo_custom_stock_status_email_txt", "value": "På lager", "display_key": "Stock Status", "display_value": "På lager" }, { "id": 179618, "key": "_reduced_stock", "value": "1", "display_key": "_reduced_stock", "display_value": "1" } ], "sku": "3556", "price": 68, "parent_name": null }, { "id": 20295, "name": "Color LED Diode 3mm - Grøn LED", "product_id": 3329, "variation_id": 3332, "quantity": 2, "tax_class": "", "subtotal": "0.80", "subtotal_tax": "0.20", "total": "0.80", "total_tax": "0.20", "taxes": [ { "id": 1, "total": "0.2", "subtotal": "0.2" } ], "meta_data": [ { "id": 179478, "key": "pa_color-led-diode-3mm", "value": "groen-led", "display_key": "Color LED Diode 3mm", "display_value": "Grøn LED" }, { "id": 179479, "key": "_woo_custom_stock_status_email_txt", "value": "På lager", "display_key": "Stock Status", "display_value": "På lager" }, { "id": 179619, "key": "_reduced_stock", "value": "2", "display_key": "_reduced_stock", "display_value": "2" } ], "sku": "2264", "price": 0.4, "parent_name": "Color LED Diode 3mm" }, { "id": 20296, "name": "Color LED Diode 3mm - Gul LED", "product_id": 3329, "variation_id": 3333, "quantity": 2, "tax_class": "", "subtotal": "0.80", "subtotal_tax": "0.20", "total": "0.80", "total_tax": "0.20", "taxes": [ { "id": 1, "total": "0.2", "subtotal": "0.2" } ],
05. april 2022 - 15:47
#5
Du henter line_items som et TJSonArray, du henter elementerne ud af dette som TJSonObject og så henter du name og quantity fields ud af dette som string.
05. april 2022 - 16:01
#6
Tak Arne. Jeg vil selvfølgelig prøve. Men du har vel ikke lidt kode, for er lidt på bare bund. :( Kunne man ændre lidt i den kode jeg har vist?
05. april 2022 - 19:13
#7
Det er svært uden at have data, resten af din kode og samme Delphi version. Og lige nu har jeg ikke engang adgang til noget som helst, så det er lidt fristil. Men noget a la: allitems := JSonObject.Get('item_list').JSonArray; firstitem := JSonArray.Items(0); name := JSonValue.GetValue<string>('name'); quantity := JSonValue.GetValue<integer>('quantity');
05. april 2022 - 20:51
#8
Jeg får fejl ved disse 3: allitems := JSonObject.Get('item_list').JSonArray; firstitem := JsonArray.Items[0]; quantity := JSonValue.GetValue<Integer>('quantity'); Kan du se hvad jeg gør forkert? var JSonData : String; JSonObject : TJSonObject; JSonValue : TJSonValue; JsonArray : TJSONArray; firstitem : String; allitems : String; quantity : String; begin JSonData := MemoJSONText.Text; JSonObject := TJSonObject.ParseJSONValue(JSonData) as TJSonObject; try allitems := JSonObject.Get('item_list').JSonArray; firstitem := JsonArray.Items[0]; name := JSonValue.GetValue<string>('name'); quantity := JSonValue.GetValue<Integer>('quantity'); finally JSonObject.Free; end; Edit1.Text := name ; Edit2.Text := quantity ;
05. april 2022 - 21:04
#9
allitems skal vaere TJSonArray firstitem skal vaere TJSonObject quantity skal vaere Integer (eller GetValue<Integer> skal avere GetValue<String>)
06. april 2022 - 17:09
#10
Har prøvet alt uden helt, tak fordi du vil bruge lidt tid på mig arne, men får stadig fejl i: allitems := JSonObject.Get('item_list').JSonArray; quantity := JSonValue.GetValue<Integer>('quantity'); var JSonData : String; JSonObject : TJSonObject; JSonValue : TJSonValue; JsonArray : TJSONArray; firstitem : TJSonArray; allitems : TJSonObject; name : String; quantity : Integer; begin JSonData := MemoJSONText.Text; JSonObject := TJSonObject.ParseJSONValue(JSonData) as TJSonObject; try allitems := JSonObject.Get('item_list').JSonArray; firstitem := JsonArray.Items[0]; name := JSonValue.GetValue<string>('name'); quantity := JSonValue.GetValue<Integer>('quantity'); finally JSonObject.Free; end; Edit1.Text := name ; Edit2.Text := quantity ;
06. april 2022 - 17:14
#11
Fejl kode: [dcc32 Error] Unit1.pas(201): E2003 Undeclared identifier: 'JSonArray' [dcc32 Error] Unit1.pas(202): E2010 Incompatible types: 'TJSONArray' and 'TJSONValue' [dcc32 Error] Unit1.pas(211): E2010 Incompatible types: 'string' and 'Integer'
07. april 2022 - 08:29
#12
Har du en ide arne?
07. april 2022 - 16:23
#13
allitems := JSonObject.Get('item_list').JSonArray; skal maaske vaere: allitems := JSonObject.GetValue<TJSonArray>('item_list');
07. april 2022 - 16:24
#14
Edit2.Text := quantity ; skal vaere: Edit2.Text := IntToStr(quantity);
07. april 2022 - 19:49
#15
Så fik jeg det sku til at virke arne! :=) Lige et sidst spørgsmål, hvordan får jeg værdien "value" uf af ""id": 281386" Bruger jeg denne kode får jeg bare "value" i den sidste menu var JSonData : String; JSonObject : TJSonObject; JSonValue : TJSonValue; valueID : String; begin JSonData := MemoJSONText.Text; JSonObject := TJSonObject.ParseJSONValue(JSonData) as TJSonObject; try JSonValue := JSonObject.Get('meta_data').JSONValue; valueID := JSonValue.GetValue<string>('value'); finally JSonObject.Free; end; Edit1.Text := valueID; JSON FILE: "meta_data": [ { "id": 281179, "key": "_new_order_email_sent", "value": "true" }, { "id": 281385, "key": "carrier", "value": "PostNord (DK)" }, { "id": 281386, "key": "package_number", "value": "123456789" }, { "id": 281387, "key": "tracking_url", "value": "https:\/\/track.shipmondo.com\/pdk\/123456789" }, { "id": 281390, "key": "bewpi_pdf_invoice_sent", "value": "1" } ],
07. april 2022 - 20:33
#16
meta_data er et array af objekter ikke et objekt, saa: JSonValue := JSonObject.Get('meta_data').JSONValue; valueID := JSonValue.GetValue<string>('value'); skal nok vaere: JSonArray := JSonObject.GetValue<TJSonArray>('meta_data'); JSonValue := JSonObject.Items(0); valueID := JSonValue.GetValue<string>('value'); eller noget ligende.
08. april 2022 - 20:34
#17
Så virker det Arne. Du skal have 1000 mange gange tak :)
Kurser inden for grundlæggende programmering