如何在 Delphi 的 TMemo 中组织这个原始字符串?

How to organize this raw string in a TMemo in Delphi?

我这里有一个非常脏的字符串,我需要 Delphi 中的代码来组织它。我的程序总是得到这个脏字符串,看一个。

[{"data":"18/06/2021","dataHora":"18/06/2021 22:08","descricao":"Objeto em trânsito - por favor aguarde","cidade":"SAO JOSE DOS CAMPOS","uf":"SP","destino":{"cidade":"JOSE","uf":"SC"}},{"data":"18/06/2021","dataHora":"18/06/2021 17:52","descricao":"Objeto em trânsito - por favor aguarde","cidade":"SAO JOSE DOS CAMPOS","uf":"SP","destino":{"cidade":"CAMPOS","uf":"SP"}},{"data":"18/06/2021","dataHora":"18/06/2021 16:53","descricao":"Objeto postado","cidade":"SAO JOSE DOS CAMPOS","uf":"SP"}]

我需要一点帮助来整理这些词,就像:

 data : 18/06/2021  -  dataHora : 18/06/2021 22:08  -  descricao : Objeto em trânsito - por favor aguarde  -  cidade : SAO JOSE DOS CAMPOS  -  uf : SP  -  destino : cidade : CAMPOS , uf : SP 
 data : 18/06/2021  -  dataHora : 18/06/2021 17:52  -  descricao : Objeto em trânsito - por favor aguarde  -  cidade : SAO JOSE DOS CAMPOS  -  uf : SP  -  destino : cidade : CAMPOS  -  uf : SP 
 data : 18/06/2021  -  dataHora : 18/06/2021 16:53  -  descricao : Objeto postado  -  cidade : SAO JOSE DOS CAMPOS  -  uf : SP 

还在继续。最快的制作方法是什么?

您拥有的字符串是格式完美的 JSON 数组。书面的,作为源代码,它更具可读性(JSON 不关心不在双引号字符串中的空格):

JSONText : String =
        '[' +
        '    {' +
        '       "data":      "18/06/2021",' +
        '       "dataHora":  "18/06/2021 22:08",' +
        '       "descricao": "Objeto em trânsito - por favor aguarde",' +
        '       "cidade":    "SAO JOSE DOS CAMPOS",' +
        '       "uf":        "SP",' +
        '       "destino":   {' +
        '                       "cidade": "JOSE",' +
        '                       "uf":     "SC"' +
        '                    }' +
        '    },' +
        '    {' +
        '       "data":      "18/06/2021",' +
        '       "dataHora":  "18/06/2021 17:52",' +
        '       "descricao": "Objeto em trânsito - por favor aguarde",' +
        '       "cidade":    "SAO JOSE DOS CAMPOS",' +
        '       "uf":        "SP",' +
        '       "destino":   {' +
        '                       "cidade": "CAMPOS",' +
        '                       "uf":     "SP"}},' +
        '    {' +
        '       "data":      "18/06/2021",' +
        '       "dataHora":  "18/06/2021 16:53",' +
        '       "descricao": "Objeto postado",' +
        '       "cidade":    "SAO JOSE DOS CAMPOS",' +
        '       "uf":        "SP"' +
        '    }' +
        ']';

这里有一个可能的解决方案来解码它并将其写入 TMemo:

procedure TForm1.Button2Click(Sender: TObject);
var
    JSONArray         : TJSONArray;
    ArrayElement      : TJSONValue;
    ItemData          : String;
    ItemDataHora      : String;
    ItemDescricao     : String;
    ItemCidade        : String;
    ItemUf            : String;
    ItemDestino       : TJSONValue;
    ItemDestinoCidade : String;
    ItemDestinoUf     : String;
begin
    Memo1.Clear;
    JSONArray := TJSONObject.ParseJSONValue(JSONText) as TJSONArray;
    try
        for ArrayElement in JsonArray do begin
            ItemData      := ArrayElement.GetValue<String>('data');
            ItemDataHora  := ArrayElement.GetValue<String>('dataHora');
            ItemDescricao := ArrayElement.GetValue<String>('descricao');
            ItemCidade    := ArrayElement.GetValue<String>('cidade');
            ItemUf        := ArrayElement.GetValue<String>('uf');
            ItemDestino   := ArrayElement.FindValue('destino');
            if Assigned(ItemDestino) then begin
                ItemDestinoCidade := ItemDestino.GetValue<String>('cidade');
                ItemDestinoUf     := ItemDestino.GetValue<String>('uf');
            end
            else begin
                ItemDestinoCidade := '';
                ItemDestinoUf     := '';
            end;
            Memo1.Lines.Add(Format('data : %s  -  dataHora : %s  -  descricao : %s  -  cidade : %s  -  uf : %s  -  destino : cidade : %s , uf : %s',
                                   [ItemData,
                                    ItemDataHora,
                                    ItemDescricao,
                                    ItemCidade,
                                    ItemUf,
                                    ItemDestinoCidade,
                                    ItemDestinoUf]));
        end;
    finally
        JSONArray.Free;
    end;
end;

您要求将其写入 TMemo,但最好使用 TStringGrid 或 TTreeView。