首页 > 解决方案 > E2108 使用 GetValue 路径评估器时 typedef 'TJSONObject' 错误使用不当

问题描述

我不能将路径评估器与 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' 使用不当

如何正确使用路径评估器?

标签: c++delphic++builder

解决方案


tokens字段是一个数组,而不是一个对象。因此,您需要请求 aTJSONArrayGetValue<T>()不是 a TJSONObject

但是,更重要的是,您请求的类型GetValue<T>()需要是指针int类型,因为您请求的是 JSON 类类型,而不是像or这样的内置类型String。由于您请求的是 aTJSONObject而不是 a TJSONObject*,这就是您收到错误的原因。

此外,GetValue<T>()返回 Pair 的部分,而不是 Pair 本身。因此,您需要将返回的指针分配给一个TJSONArray*变量(改为jpaa 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");
}

推荐阅读