我下面有JSON:
{
"value": "[{\"field1\":\"value1\",\"field2\":\"value2\",\"field3\":\"value3\"}]",
"formatters": [],
"contentTypes": [],
"declaredType": null,
"statusCode": 200
}
我需要使用Delphi来获取value
作为数组。
var
obj2: TJSonObject;
arr: TJSONArray;
整个JSON是一个对象,所以我首先要做:
obj2 := TJSONObject.ParseJSONValue(strJSon) as TJSONObject;
然后我需要将value
部分作为数组,所以我使用:
arr := obj2.GetValue('value') as TJSONArray;
我在上面的行中收到Invalid Class Typecast
错误。
有人知道为什么吗?
答案 0 :(得分:1)
您可以在进行类型转换之前将此转换应用于您的StrJson变量
executeJavaScript(scriptToExecute)
答案 1 :(得分:0)
在您显示的JSON中,value
字段是 string ,而不是 array 。这就是为什么您遇到强制转换错误的原因。如果它是一个 actual 数组,它将看起来像这样:
"value": [{"field1":"value1","field2":"value2","field3":"value3"}],
请注意,周围的引号已消失,内部引号也未转义为\"
。
如果您知道value
字符串代表一个JSON数组,则可以这样访问该数组:
var
val1, val2: TJSONValue;
obj: TJSONObject;
arr: TJSONArray;
begin
val1 := TJSONObject.ParseJSONValue(strJSon);
try
obj := val1 as TJSONObject;
val2 := TJSONObject.ParseJSONValue(obj.GetValue('value').Value);
try
arr := val2 as TJSONArray;
// use arr as needed ...
finally
val2.Free;
end;
finally
val1.Free;
end;
end;