我不能将路径评估器与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>()请求的类型必须是指针类型,而不是像intString这样的内置类型。由于您请求的是TJSONObject而不是TJSONObject*,因此这就是您收到错误的原因。

同样,GetValue<T>()返回对的值部分,而不是对本身。因此,您需要将返回的指针分配给TJSONArray*变量(jpaTJSONPair*代替)。

尝试这个:

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");
}

10-05 20:52