gpt4 book ai didi

Json 解析 "Invalid class typecast"问题。 [德尔福XE7]

转载 作者:行者123 更新时间:2023-12-02 04:26:56 24 4
gpt4 key购买 nike

我正在尝试使用 Delphi XE7 解析来自 Twitter API 的 JSON 结果。我收到“无效的类类型转换”错误,但我使用在线验证器检查 JSON,结果没问题。

这是 JSON 结果:

[
{
"trends":
[
{
"name":"#OneDirectionIsOverParty",
"url":"http://twitter.com/search?q=%23OneDirectionIsOverParty",
"promoted_content":null,
"query":"%23OneDirectionIsOverParty",
"tweet_volume":410022
},
{
"name":"#TheDarkKnight",
"url":"http://twitter.com/search?q=%23TheDarkKnight",
"promoted_content":null,
"query":"%23TheDarkKnight",
"tweet_volume":null
},
{
"name":"#QuintaComOClubeSdv",
"url":"http://twitter.com/search?q=%23QuintaComOClubeSdv",
"promoted_content":null,
"query":"%23QuintaComOClubeSdv",
"tweet_volume":23756
}
],
"as_of":"2016-07-21T20:14:13Z",
"created_at":"2016-07-21T20:08:31Z",
"locations":
[
{
"name":"Worldwide",
"woeid":1
}
]
}
]

这是我的解析函数:

procedure ParseJSON(const JSON: string);
var
JSONObject: TJSONObject;
MessageText: TJSONArray;
NodeDetails: TJSONObject;
MsgDetail: TJSONString;
I: Integer;
Item: TListItem;
begin
JSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(JSON), 0) as TJSONObject;
MessageText := JSONObject.Get('trends').JSONValue as TJSONArray;

for I := 0 to TJSONArray(MessageText).Size - 1 do
begin
Item := Form1.ListView1.Items.Add;
NodeDetails := MessageText.Get(I) as TJSONObject;
MsgDetail := NodeDetails.Get('query').JSONValue as TJSONString;
Item.Caption := MsgDetail.Value;
end;

实际上,此函数可与 Twitter API 的其他 JSON 结果配合使用。它不仅仅适用于这一个结果。

最佳答案

JSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(JSON), 0) as TJSONObject;

JSON 的根是一个数组,而不是对象。因此出现了错误。

您需要将 ParseJSONValue() 的返回值转换为 TJSONArray 而不是 TJSONObject,然后您就可以访问数组并读取其趋势值。您已经有了解析数组的代码,因此您清楚地知道如何执行此操作。

如果您不清楚对象和数组的 JSON 术语,请阅读JSON spec .

关于Json 解析 "Invalid class typecast"问题。 [德尔福XE7],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38513753/

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