如何解析 Delphi 中的嵌套 TJSONObject?
How can I parse a nested TJSONObject in Delphi?
我的 Delphi 应用程序调用 REST API,它产生以下 JSON:
{
"status": "success",
"message": "More details",
"data": {
"filestring": "long string with data",
"correct": [
{
"record": "Lorem ipsum",
"code": 0,
"errors": []
}
],
"incorrect": [
{
"record": "Lorem ipsum",
"code": 2,
"errors": [
"First error",
"Second error"
]
}
],
}
}
我现在想处理这些数据,但我无法接收存储在 data
部分中的信息。目前我正在尝试接收如下数据:
var
vResponse : TJSONObject;
vData : TJSONObject;
begin
// .. do other stuff ..
vResponse := // call to REST API (Returns a valid TJSONObject I've wrote it into a file)
vData := vResponse.get('data'); // throws error
end;
但这会导致以下错误:
Incompatible Types: TJSONObject and TJSONPair
有人知道我怎样才能做到这一点吗?
Incompatible Types: TJSONObject and TJSONPair
错误信息不言自明:vData
被声明为TJSONObject
,这意味着Get
函数的return类型是TJSONPair
.
要修复此类错误,您需要更改结果变量的声明。在这种情况下,这意味着将 vData
声明为 TJSONPair
.
但是,如果您对获得一双不感兴趣,而是 TJSONObject
,则需要使用其他方式来取回它。例如 Values
属性。因为 Values
returns TJSONValue
如果您知道该值是一个对象,则需要将其类型转换为 TJSONObject
。
vData := vResponse.Values['data'] as TJSONObject;
TJSONObject.Get()
returns一个TJSONPair
,不是一个TJSONObject
。您将必须:
使用 TJSONPair.JsonValue
属性:
var
vResponse : TJSONObject;
vData : TJSONObject;
begin
// .. do other stuff ..
vResponse := // call to REST API (Returns a valid TJSONObject I've wrote it into a file)
vData := vResponse.Get('data').JsonValue as TJSONObject;
end;
使用TJSONObject.GetValue()
方法,returns只是找到TJSONPair
:
的JsonValue
var
vResponse : TJSONObject;
vData : TJSONObject;
begin
// .. do other stuff ..
vResponse := // call to REST API (Returns a valid TJSONObject I've wrote it into a file)
vData := vResponse.GetValue('data') as TJSONObject;
end;
我的 Delphi 应用程序调用 REST API,它产生以下 JSON:
{
"status": "success",
"message": "More details",
"data": {
"filestring": "long string with data",
"correct": [
{
"record": "Lorem ipsum",
"code": 0,
"errors": []
}
],
"incorrect": [
{
"record": "Lorem ipsum",
"code": 2,
"errors": [
"First error",
"Second error"
]
}
],
}
}
我现在想处理这些数据,但我无法接收存储在 data
部分中的信息。目前我正在尝试接收如下数据:
var
vResponse : TJSONObject;
vData : TJSONObject;
begin
// .. do other stuff ..
vResponse := // call to REST API (Returns a valid TJSONObject I've wrote it into a file)
vData := vResponse.get('data'); // throws error
end;
但这会导致以下错误:
Incompatible Types: TJSONObject and TJSONPair
有人知道我怎样才能做到这一点吗?
Incompatible Types: TJSONObject and TJSONPair
错误信息不言自明:vData
被声明为TJSONObject
,这意味着Get
函数的return类型是TJSONPair
.
要修复此类错误,您需要更改结果变量的声明。在这种情况下,这意味着将 vData
声明为 TJSONPair
.
但是,如果您对获得一双不感兴趣,而是 TJSONObject
,则需要使用其他方式来取回它。例如 Values
属性。因为 Values
returns TJSONValue
如果您知道该值是一个对象,则需要将其类型转换为 TJSONObject
。
vData := vResponse.Values['data'] as TJSONObject;
TJSONObject.Get()
returns一个TJSONPair
,不是一个TJSONObject
。您将必须:
使用
TJSONPair.JsonValue
属性:var vResponse : TJSONObject; vData : TJSONObject; begin // .. do other stuff .. vResponse := // call to REST API (Returns a valid TJSONObject I've wrote it into a file) vData := vResponse.Get('data').JsonValue as TJSONObject; end;
使用
的TJSONObject.GetValue()
方法,returns只是找到TJSONPair
:JsonValue
var vResponse : TJSONObject; vData : TJSONObject; begin // .. do other stuff .. vResponse := // call to REST API (Returns a valid TJSONObject I've wrote it into a file) vData := vResponse.GetValue('data') as TJSONObject; end;