【发布时间】:2015-02-12 09:04:03
【问题描述】:
我正在尝试捕获以下 JSON 数组:
[{"name":"Bryan","email":"Bryan@hotmail.com"}, {"name":"Louis","email":"Louis@hotmail.com"}, {"name":"Maria","email":"Maria@hotmail.com"}, {"name":"Test","email":"test@hotmail.com"}, {"name":"Anthony","email":"anthony@hotmail.com"}]并将其放入 Delphi 中的 Memo 或 ListBox 中:
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var jv: TJSONValue;
jo: TJSONObject;
jp: TJSONPair;
ja: TJSONArray;
i: integer;
j: integer;
begin
RESTRequest1.Execute;
jv:=RESTResponse1.JSONValue;
jo:= TJSONObject.ParseJSONValue(jv.ToString) as TJSONObject;
try
for i := 0 to jo.Size - 1 do
begin
jp := jo.Get(i);
if jp.JsonValue is TJSONArray then
begin
ja := jp.JsonValue as TJSONArray;
for j := 0 to ja.Size -1 do
Memo1.Lines.Add(ja.Get(i).ClassName + ': ' + ja.Get(j).ToString);
end
else
Memo1.Lines.Add(jp.ClassName + ': '+ jp.ToString);
end;
finally
jo.Free;
end;
end;
当我点击按钮时,我收到以下错误消息:
类类型转换无效
在调试期间,以下行有问题:
jo:= TJSONObject.ParseJSONValue(jv.ToString) as TJSONObject;
我不知道如何解决这个问题或这个错误, 你能帮帮我吗?
谢谢。
【问题讨论】:
-
显然
TJSONObject.ParseJSONValue(jv.ToString)返回的值不是从TJSONObject派生的。也许是nil。你可以很容易地调试它。如果您希望我们提供帮助,您需要制作 MCVE。这样做很容易。我们没有 REST。我们需要的是jv.ToString的值。你可以为此制作一个 10 行的 MCVE。学习如何调试确实是您的目标。 -
好吧,如果你改变你的 JSON,它就会起作用。
{"Persons": <The array as standing above>}对我来说很好。 -
感谢大卫的及时答复。我想你在谈论这个例子,但你所说的 10 行 MCVE 是什么意思? jv.ToString 的值已经显示为 Json 数组
-
你觉得json数组需要改吗?
-
那么你为什么要把我们与所有的 REST 混淆?据我们所知,REST 不起作用。
标签: json delphi delphi-xe7