如何使用Delphi解析JSON字符串响应

路易斯·阿尔维斯

我有一个休息服务器返回下一个json字符串:

response:='{"result":["[{\"email\":\"[email protected]\",\"regid\":\"12312312312312312313213w\"},{\"email\":\"[email protected]\",\"regid\":\"AAAAAAA\"}]"]}';

我倒是喜欢解析响应以获取所有的清单emailregid项目。

我已经尝试了下一个代码,但是正在获取AV (TJSONPair(LItem).JsonString.Value='email')

任何帮助将不胜感激。

预先感谢,路易斯

var
  LResult:TJSONArray;
  LJsonresponse:TJSONObject;
  i:integer;
  LItem,jv:TJsonValue;
  email,regid:string;

      LJsonresponse:=TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(response),0) as TJSONObject;
      LResult:=(LJsonresponse.GetValue('result') as TJSONArray);
      jv:=TJSONArray(LResult.Get(0));
      for LItem in TJSONArray(jv) do begin
         if (TJSONPair(LItem).JsonString.Value='email') then begin
           email:=TJSONPair(LItem).JsonValue.Value;
         end;
         if (TJSONPair(LItem).JsonString.Value='regid') then begin
           regid:=TJSONPair(LItem).JsonValue.Value;
         end;
      end;
戴维·赫弗南

您的问题从这里开始:

jv := TJSONArray(LResult.Get(0));

问题是LResult.Get(0)不返回的实例TJSONArray实际上,它返回的实例TJSONString该字符串具有值:

'[{"email":"[email protected]","regid":"12312312312312312313213w"},{"email":"[email protected]","regid":"AAAAAAA"}]'

看来您将需要将此字符串解析为JSON来提取所需的内容。这是一些粗糙的代码。请原谅它的质量,因为我完全没有使用Delphi JSON解析器的经验。

{$APPTYPE CONSOLE}

uses
  SysUtils, JSON;

const
  response =
    '{"result":["[{\"email\":\"[email protected]\",\"regid\":\"12312312312312312313213w\"},'+
    '{\"email\":\"[email protected]\",\"regid\":\"AAAAAAA\"}]"]}';

procedure Main;
var
  LResult: TJSONArray;
  LJsonResponse: TJSONObject;
  ja: TJSONArray;
  jv: TJSONValue;
begin
  LJsonResponse := TJSONObject.ParseJSONValue(response) as TJSONObject;
  LResult := LJsonResponse.GetValue('result') as TJSONArray;
  ja := TJSONObject.ParseJSONValue(LResult.Items[0].Value) as TJSONArray;
  for jv in ja do begin
    Writeln(jv.GetValue<string>('email'));
    Writeln(jv.GetValue<string>('regid'));
  end;
end;

begin
  try
    Main;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

这里的主要教训是停止使用未经检查的类型强制转换。使用这样的强制转换会带来麻烦。如果您的数据与代码不匹配,则会收到无用的错误消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Delphi中解析JSON字符串?

当数据是字符串而不是对象时,如何在android中使用解析相同的json响应?

从HTTP响应解析Json字符串

在解析动态字符串值以获取JSON中的特定节点值后,如何使用Groovy将动态字符串值连接到JSON响应

如何使用 mssql 解析 JSON 数组字符串?

如何使用jsonpath解析json字符串?

空手道如何解析字符串化的json响应

如何在Java(Android)中解析简单的Json响应(多个字符串)?

在Objective-C中解析JSON响应字符串

如何从HttpClient解析JSON字符串?

如何从URL解析Json字符串

使用JSON从字符串解析数组?

使用jq解析JSON字符串

使用json解析空字符串

如何使用替换器函数对来自UrlFetchApp的响应进行字符串化和解析?

如何使用通配符解析字符串?

Android-Retrofit Gson-如何在JSON响应中解析JSON字符串以指向JSON密钥的对象?

如何在Delphi XE 10中将JSON字符串返回的日期时间解析为TDateTime

如何解析以字符'u'开头的JSON字符串

从字符串解析JSON

如何使用 JMeter 从 JSON 响应中存在的 URL 中提取子字符串

如何使用多维数组从api json响应中回显字符串

如何在字符串下的JSON中响应?使用PHP Webservice

如何访问ngResource响应的原始JSON字符串?

如何解析json字符串并迭代json对象

如何使JSON解析包含单引号的JSON字符串

使用 Cheshire 解析为 json - 生成字符串和解析字符串

使用 Apache JMeter 从字符串响应中提取 JSON

如何使用dataweave 2.0使用转义的json解析字符串