json - 使用 StringReplace 从 JSON 响应中删除不需要的字符的替代方法

标签 json delphi superobject

我正在开发一个小项目,该项目需要我解析 JSON 文件并将结果放入数据库中。我正在使用 SuperOjbect 解析文件并生成结果,但我遇到了一些障碍,需要一些帮助。

这是我需要解析的 JSON 文件的示例。实际上,这些文件包含的信息比这更多,但这只是为了向您提供我正在处理的数据类型的示例。

{
    "id" : 1,
    "object" : "value",
    "colors" : ["red", "green", "blue"],
}

这是我用来解析文件一部分(在本例中为数组)的代码示例。

var
  jo : ISuperObject;
begin
  jo := TSuperObject.ParseFile('response.txt', TRUE);
  ShowMessage(jo['colors'].AsString);
end;

这会产生一个如下所示的字符串:["red", "blue", "green"],然后我使用 StringReplace 函数删除所有 []"字符,所以我留下了一个现在看起来像这样的红色、绿色、蓝色的字符串,这工作正常,但我正在寻找一种更适合此方法的替代方法类似的事情,而不是依赖 StringReplace 函数,如果我需要解析的 JSON 文件更复杂,这可能会导致不可预见的问题。有什么想法吗?

最佳答案

由于您知道 colors 是一个数组,并且数组总是用括号进行字符串化,因此只需使用 Copy() 删除括号即可。至于删除 " 字符。您有几个选择:

  1. 使用StringReplace(),就像您已经知道的那样:

    var
      jo : ISuperObject;
      s: string;
    begin
      jo := TSuperObject.ParseFile('response.txt', TRUE);
      s := jo['colors'].AsString;
      s := Copy(s, 2, Length(s)-2);
      s := StringReplace(s, '"', '', [rfReplaceAll]);
      ShowMessage(s);
    end;
    
  2. 使用TStringList。它的默认 QuoteChar",因此它可以使用其 CommaText 属性为您解析出引用的值:

    var
      jo : ISuperObject;
      sl: TStringList;
      s: string;
    begin
      jo := TSuperObject.ParseFile('response.txt', TRUE);
      s := jo['colors'].AsString;
      sl := TStringList.Create;
      try
        sl.CommaText := Copy(s, 2, Length(s)-2);
        s := sl.CommaText;
      finally
        sl.Free;
      end;
      ShowMessage(s);
    end;
    

或者,根本不要对整个数组进行字符串化。遍历数组提取您需要的各个值:

var
  jo : ISuperObject;
  arr: ISuperObject;
  sl: TStringList;
  i: Integer;
  s: string;
begin
  jo := TSuperObject.ParseFile('response.txt', TRUE);
  arr := jo['colors'].AsArray;
  sl := TStringList.Create;
  try
    for i := 0 to arr.Length-1 do
      sl.Add(arr.S[i]);
    s := sl.CommaText;
  finally
    sl.Free;
  end;
  ShowMessage(s);
end;

关于json - 使用 StringReplace 从 JSON 响应中删除不需要的字符的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24749385/

相关文章:

javascript - 如何使用 json 中的 ionic 2 在 html 中显示此数据?

delphi - 排序的 TStringList 错误 - 排序列表上不允许进行操作

json - 无法将 SuperObject JSON 反序列化为对象

json - 从 JSON 结果中删除类型信息

mysql - 在mysql中通过key查找json

multithreading - 在基于 SQLite 的 Delphi 应用程序中是否需要使用线程?

delphi - 将控制台应用程序与 GUI 应用程序一起使用?

json - Delphi XE7 : How to change a JSON value using System. JSON(与 SuperObject)

json - super 对象 - 元素名称中的空格

jquery - 从表单创建自定义 JSON 字符串