我不能将路径评估器与GetValue一起使用。
这种情况:
[{"source":"aaaa","cluster":"1","tokens":[{},{}]}, {"source":"bbbb","cluster":"2","tokens":[{},{}]}]
TJSONArray *Data = ...;
TJSONObject *obj;
TJSONPair *jpa;
for(int i=0; i<Data->Size(); i++)
{
obj = (TJSONObject*) Data->Get(i);
jpa = obj->GetValue<TJSONObject>("$.tokens");
}
我在这行上出错:
jpa = obj->GetValue<TJSONObject>("$["+IntToStr(i)+"].tokens");
错误:
E2108 typedef'TJSONObject'的不当使用
如何正确使用路径评估器?
最佳答案
tokens
字段是一个数组,而不是一个对象。因此,您需要从TJSONArray
而不是GetValue<T>()
请求TJSONObject
。
但是,更重要的是,由于要请求JSON类类型,因此从GetValue<T>()
请求的类型必须是指针类型,而不是像int
或String
这样的内置类型。由于您请求的是TJSONObject
而不是TJSONObject*
,因此这就是您收到错误的原因。
同样,GetValue<T>()
返回对的值部分,而不是对本身。因此,您需要将返回的指针分配给TJSONArray*
变量(jpa
是TJSONPair*
代替)。
尝试这个:
TJSONArray *Data = ...;
TJSONObject *obj;
TJSONArray *arr;
for(int i = 0; i < Data->Size(); i++)
{
obj = (TJSONObject*) Data->Get(i);
arr = obj->GetValue<TJSONArray*>("tokens");
}
要么:
TJSONArray *Data = ...;
TJSONArray *arr;
for(int i = 0; i < Data->Size(); i++)
{
arr = Data->GetValue<TJSONArray*>("$["+IntToStr(i)+"].tokens");
}