[SOLVED] Copy JSON string to a grid lazarus / 38-Networking and Web Programming ---------------------------------------------------------------------- JD · 2015-10-25 19:19 Hi there everyone, I have a problem that I've been wrestling with for a few days. I'm trying to convert a JSON array into rows in a grid. I'm using the TKGrid for this purpose. Here is the JSON array: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i [    {"NAME":"Patricia","SEX":"Female","COUNTRY":"Wales; "},    {"NAME":"Pauline","SEX":"Female","COUNTRY":"Scotland; "},    {"NAME":"Quinterie","SEX":"Female","COUNTRY":"France; "},    {"NAME":"Salome","SEX":"Female","COUNTRY":"Israel; "},    {"NAME":"Sandra","SEX":"Female","COUNTRY":"Wales; "},    {"NAME":"Sigourney","SEX":"Female","COUNTRY":"England; "},    {"NAME":"Silvia","SEX":"Female","COUNTRY":"Scotland; "},    {"NAME":"Sonia","SEX":"Female","COUNTRY":"Italy; "},    {"NAME":"Veronica","SEX":"Female","COUNTRY":"Ireland; "},    {"NAME":"Viviane","SEX":"Female","COUNTRY":"France; "}]  The code that copies the array into the grid is as follows: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure TfrmQuery.FillGrid(AGrid: TKGrid; AString: string);var  fixedCols  : integer;  fixedRows  : integer;  ARow,ACol  : integer;  intGridRow, intGridCol : integer;  intLastUsedRow, intNumberOfRows, intNumberOfColumns, intNumberOfSQLQueryRows: integer;  //  jsParser: TJSONParser;  jsData: TJSONData;  //jsRow: TJSONEnum;begin  //  fixedCols := AGrid.FixedCols;  fixedRows := AGrid.FixedRows;  intLastUsedRow := AGrid.RowCount;  // get the old row & column count  intNumberOfRows := AGrid.RowCount - fixedRows;  intNumberOfColumns := AGrid.ColCount - fixedCols;  //  jsParser  := TJSONParser.Create(AString);  //  try    // Parse the JSON data    jsData := jsParser.Parse;    //    if jsData <> nil then begin      // get the number of rows returned by the query in the JSON data object    intNumberOfSQLQueryRows := jsData.Count;      //      AGrid.RowCount := AGrid.RowCount + intNumberOfSQLQueryRows;       // append the json rows to the grid      for intGridRow := 0 to intNumberOfSQLQueryRows - 1 do      begin        // Select the row after the last used row        ARow := intGridRow + intLastUsedRow;      //        for intGridCol := 0 to intNumberOfColumns - 1 do        begin          //          ACol := intGridCol + fixedCols;          //          AGrid.Cells[ACol, ARow] := jsData.Items[intGridCol].AsString;  // ERROR HERE        end;    // for intGridCol := 0 to intNumberOfColumns - 1 do      end;      // for intGridRow := 0 to intNumberOfSQLQueryRows - 1 do    end;        // if jsData <> nil then begin  finally    jsData.Clear;    jsParser.Free;  end;end;  On line 44, AGrid.Cells[ACol, ARow] := jsData.Items[intGridCol].AsString;, I get the EJSON exception cannot convert data from object value. I've looked at all the JSON examples as well as what is posted on this forum but I still can't figure it out. Thanks for your assistance. JD ---------------------------------------------------------------------- Graeme · 2015-10-25 23:39 I haven't tried to compile or run your code, but from what I can see by quickly reading through the code.... jsData.Items[intGridCol] returns the JSON array element. You need to then process that array element further by extracting the Name, Sex or Country data - based on what you want to display in the grid cell. ---------------------------------------------------------------------- engkin · 2015-10-26 00:12 Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program Project1; uses  fpjson, jsonparser; var  s:String;  Parser:TJSONParser;  Arr:TJSONArray;  i: integer;begin  s :=  '['+    '{"NAME":"Patricia","SEX":"Female","COUNTRY":"Wales; "},'+      '{"NAME":"Pauline","SEX":"Female","COUNTRY":"Scotland; "},'+      '{"NAME":"Quinterie","SEX":"Female","COUNTRY":"France; "},'+      '{"NAME":"Salome","SEX":"Female","COUNTRY":"Israel; "},'+      '{"NAME":"Sandra","SEX":"Female","COUNTRY":"Wales; "},'+      '{"NAME":"Sigourney","SEX":"Female","COUNTRY":"England; "},'+      '{"NAME":"Silvia","SEX":"Female","COUNTRY":"Scotland; "},'+      '{"NAME":"Sonia","SEX":"Female","COUNTRY":"Italy; "},'+      '{"NAME":"Veronica","SEX":"Female","COUNTRY":"Ireland; "},'+      '{"NAME":"Viviane","SEX":"Female","COUNTRY":"France; "}'+  ']';   Parser:=TJSONParser.Create(s);  Arr := Parser.Parse as TJSONArray;  WriteLn('Array of ',Arr.Count);  for i := 0 to Arr.Count - 1 do  begin    SubObj := Arr.Objects[i];    WriteLn(i+1, ': ', SubObj.Strings['NAME'], ', ', SubObj.Strings['SEX'], ', ', SubObj.Strings['COUNTRY']);  end;  readln;  //...etcend.  URL ---------------------------------------------------------------------- JD · 2015-10-26 20:18 Thanks a million for your replies Graeme & engkin. @engkin Your example clarified things for me. It now works! JD