gpt4 book ai didi

json - Delphi JsonTextReader无法读取值

转载 作者:行者123 更新时间:2023-12-03 18:30:06 25 4
gpt4 key购买 nike

我的情况很奇怪。

这是我要解析的JSON:

[
{
"username":"xxx",
"email":"xxx@gmail.com",
"custom_title":"xxx title",
"timezone":"Africa\/Cairo",
"message_count":"218",
"alerts_unread":"0",
"like_count":"385",
"friend_count":"0"
}
]


这是我的解析代码:

type
TUserData = record
email, timezone: string;
msg, alerts, likes: integer;
end;

procedure TDMRest.parseData(var b: TUserData);
var
jtr: TJsonTextReader;
sr: TStringReader;
begin
//RESTResponseLogin.Content has the above json text
sr := TStringReader.Create(RESTResponseLogin.Content);
try
jtr := TJsonTextReader.Create(sr);
try
while jtr.Read do
begin
if jtr.TokenType = TJsonToken.StartObject then
process(b, jtr);
end;
finally
jtr.Free;
end;
finally
sr.Free;
end;
end;

//here there is a problem
procedure TDMRest.process(var c: TUserData; jtr: TJsonTextReader);
begin
while jtr.Read do
begin
if (jtr.TokenType = TJsonToken.PropertyName) then
begin
if jtr.Value.ToString = 'email' then
begin
jtr.Read;
c.email := jtr.Value.AsString;
end;

if jtr.Value.ToString = 'timezone' then
begin
jtr.Read;
c.timezone := jtr.Value.AsString;
end;

if jtr.Value.ToString = 'message_count' then
begin
jtr.Read;
c.msg := jtr.Value.AsInteger;
end;

if jtr.TokenType = TJsonToken.EndObject then
begin
c.alerts := 0;
c.likes := 0;
exit;
end;
end;
end;
end;


我的问题:在 process()代码中,前2个 if块( emailtimezone)可以将值读入我的记录中。但是,当我添加其他 if块(例如 if jtr.Value.ToString = 'message_count' then)时,我再也看不到记录的值了。

我是否正确解析数据?

基本上,我需要从JSON字符串中获取信息并将数据放入 TUserData记录中。

我在名为“ Expert Delphi”的书中找到了上述模式,并且我很确定 parseData()函数是正确的。可能我在此过程中缺少了一些东西。

TDMRrst是一个DataModule;我给函数一个记录,并且我希望数据能够正确解析。

怎么了

最佳答案

在显示的JSON中,所有值都是字符串,没有整数。因此,当您为jtr.Value.AsInteger值调用message_count时,会引发您没有捕获的转换异常。 TValue.AsInteger不会为您执行从字符串到整数的隐式转换。

您将不得不使用jtr.Value.AsString代替,并使用StrToInt()将字符串转换为整数:

if jtr.Value.ToString = 'message_count' then
begin
jtr.Read;
//c.msg := jtr.Value.AsInteger;
c.msg := StrToInt(jtr.Value.AsString);
end;


对JSON中的其他“整数”值( alerts_unreadlike_countfriend_count)执行相同的操作。

关于json - Delphi JsonTextReader无法读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com