在Delphi中无效的类型转换错误处理JsonResult

时间:2018-10-08 23:58:24

标签: arrays json delphi

我下面有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错误。

有人知道为什么吗?

2 个答案:

答案 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;