Note that there are some explanatory texts on larger screens.

plurals
  1. POJSON to StringList using Delphi Xe5
    primarykey
    data
    text
    <p>I am using Delphi Xe5 and I have a component that essentially uses IDTCPCLient (sockets) to talk with are server and retrieve data in the form of JSON. I have spared you all the connection code , etc. It works. The returned JSon works as well. The trouble I am having is converting my JSON into a StringList, which I then use to write out a list of values to a listbox and store the rest of the JSON data objects in the TSTrings OBjects property.</p> <p>I have a number of funny things happen. </p> <p>1.) I can't for the life of me get the List property to work properly. I use this list to store my JSON. A string value and then the entire object for each item in the list. You will notice that in the JSONToStringList method, I clear the stringlist (it is commented out, becuase when it isn't, my program hangs)</p> <p>2.) I get dupplicate values in my list after calling the method more than once for multiple JSON sets needed</p> <pre><code>TConnector = class(TComponent) private { Private declarations } FList: TStrings; procedure SetList(const Value: TStrings); protected { Protected declarations } public { Public declarations } Constructor Create( AOwner : TComponent ); override; Destructor Destroy; Override; Procedure GenerateJSON; Procedure JSONToStringList(aJSonKey: String); published { Published declarations } property List: TStrings Read FList Write SetList; end; Constructor TConnector.Create(AOwner: TComponent); begin inherited; FList:= TStringList.Create(True); end; destructor TConnector.Destroy; begin if FList &lt;&gt; nil then FreeAndNil(FList); inherited; end; Procedure TConnector.GenerateJSON; begin if ResponseStream&lt;&gt;nil then Begin FreeAndNil(ResponseJSON_V); ResponseJSON_V := TJSONObject.ParseJSONValue(StreamToArray(ResponseStream),0) as TJSONValue; End; end; procedure TConnector.JSONToStringList(aJSonKey: String); Var zLJsonValue : TJSONValue; zLJSONArray: TJSONArray; zLJsonObject : TJSONObject; zI : Integer; begin if ResponseJSON_V is TJSONArray then begin zLJSONArray:= ResponseJSON_V as TJSONArray; zLJsonObject := zLJSONArray.Get(0) as TJSONObject; end else if ResponseJSON_V is TJSONObject then begin zLJSONArray:= nil; zLJsonObject := ResponseJSON_V as TJSONObject; end else Exit; if zLJSONArray&lt;&gt;nil then begin ***//FList.Clear;*** for zLJsonValue in zLJSONArray do begin zLJsonObject := zLJsonValue as TJSONObject; for zI := 0 to zLJsonObject.Size-1 do begin if zLJsonObject.Get(zI).JsonString.Value = aJSonKey then begin FList.AddObject(zLJsonObject.Get(zI).JSONValue.Value, zLJsonObject); end; end; end; end else begin FList.Clear; for zI := 0 to zLJsonObject.Size-1 do begin if zLJsonObject.Get(zI).JsonString.Value = aJSonKey then FList.AddObject(zLJsonObject.Get(zI).JSONValue.Value, TJSONPair(zLJsonObject.Get(zI))); end; end; end; </code></pre> <p>I hope this is all understandable. Please let me know if you need to see more. Please feel free to correct anything else you see bad in my code. I am always learning :) - thank you for your help</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload