类型转换无效 JSON
Invalid typecast JSON
当我尝试执行以下代码时出现“Invalid Class TypeCast”错误。错误发生在突出显示的行上。
procedure TFMLogin.Button1Click(Sender: TObject);
var
jsonObj, jSubObj: TJSONObject;
ja: TJSONArray;
jv: TJSONValue;
i, j, k: Integer;
begin
Memo2.Clear;
Fconex.datarax('/users.json');
Memo2.Text:=FConex.ResponseJson;
jsonObj := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(memo2.Text), 0) as TJSONObject;
ShowMessage('converted');
for j := 0 to jsonObj.Size - 1 do
// if jsonObj.Get(j).JsonString.Value = 'users' then
begin
jv := jsonObj.Get(j).JsonValue;
ShowMessage('1');
ja := jv as TJSONArray; // <------------ ERROR
ShowMessage('1.5');
for i := 0 to ja.Size - 1 do
begin
jSubObj := (ja.Get(i) as TJSONObject);
ShowMessage('2');
for k := 0 to jSubObj.Size - 1 do
begin
if jSubObj.Get(k).JsonString.Value = 'mac' then
begin
memo3.lines.add(jSubObj.Get(k).JsonValue.Value);
ShowMessage('3');
end;
end;
end;
end;
end;
JSON到read/treat是这样的:
{
"beg@hotmailcom":{
"email":"beg@hotmail.com",
"mac":"20-47-47-FE-97-DA",
"pid":"true",
"to":" 21/06/2022"
},
"fg@hotmail.com":{
"email":"fg@hotmail.com",
"mac":"20-47-47-FE-97-DA",
"po":"true",
"to":" 21/06/2022"
}
}
最近,我在数组中使用了这个 JSON 文件读取语法并继续工作。但是,在这个例子中,出现了这个错误。
TJSONValue 是所有 JSON class 定义字符串、对象、数组、数字、布尔值、真、假、和空值。
要将任何 JSONValu 类型转换为其任何后代,JSONValue 应具有兼容类型。
在您给出的示例JSON中,没有数组。因此,无法进行请求的类型转换。
你的 JSON 应该是这样的,上面的类型转换才能正确发生。
{
"beg@hotmailcom":["beg@hotmail.com","20-47-47-FE-97-DA", "true", " 21/06/2022"]
}
当我尝试执行以下代码时出现“Invalid Class TypeCast”错误。错误发生在突出显示的行上。
procedure TFMLogin.Button1Click(Sender: TObject);
var
jsonObj, jSubObj: TJSONObject;
ja: TJSONArray;
jv: TJSONValue;
i, j, k: Integer;
begin
Memo2.Clear;
Fconex.datarax('/users.json');
Memo2.Text:=FConex.ResponseJson;
jsonObj := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(memo2.Text), 0) as TJSONObject;
ShowMessage('converted');
for j := 0 to jsonObj.Size - 1 do
// if jsonObj.Get(j).JsonString.Value = 'users' then
begin
jv := jsonObj.Get(j).JsonValue;
ShowMessage('1');
ja := jv as TJSONArray; // <------------ ERROR
ShowMessage('1.5');
for i := 0 to ja.Size - 1 do
begin
jSubObj := (ja.Get(i) as TJSONObject);
ShowMessage('2');
for k := 0 to jSubObj.Size - 1 do
begin
if jSubObj.Get(k).JsonString.Value = 'mac' then
begin
memo3.lines.add(jSubObj.Get(k).JsonValue.Value);
ShowMessage('3');
end;
end;
end;
end;
end;
JSON到read/treat是这样的:
{
"beg@hotmailcom":{
"email":"beg@hotmail.com",
"mac":"20-47-47-FE-97-DA",
"pid":"true",
"to":" 21/06/2022"
},
"fg@hotmail.com":{
"email":"fg@hotmail.com",
"mac":"20-47-47-FE-97-DA",
"po":"true",
"to":" 21/06/2022"
}
}
最近,我在数组中使用了这个 JSON 文件读取语法并继续工作。但是,在这个例子中,出现了这个错误。
TJSONValue 是所有 JSON class 定义字符串、对象、数组、数字、布尔值、真、假、和空值。
要将任何 JSONValu 类型转换为其任何后代,JSONValue 应具有兼容类型。
在您给出的示例JSON中,没有数组。因此,无法进行请求的类型转换。
你的 JSON 应该是这样的,上面的类型转换才能正确发生。
{
"beg@hotmailcom":["beg@hotmail.com","20-47-47-FE-97-DA", "true", " 21/06/2022"]
}