E2108 Неправильное использование typedef 'TJSONObject' Ошибка при использовании оценщика пути GetValue - PullRequest
0 голосов
/ 05 декабря 2018

Я не могу использовать оценщик пути с 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'

Как правильно использовать оценщик пути?

1 Ответ

0 голосов
/ 05 декабря 2018

Поле tokens является массивом, а не объектом.Поэтому вам нужно запросить TJSONArray у GetValue<T>() вместо TJSONObject.

Но, что более важно, тип, который вы запрашиваете у GetValue<T>(), должен быть указателем тип, поскольку вы запрашиваете тип класса JSON, а не встроенный тип, такой как int или String.Поскольку вы запрашиваете TJSONObject вместо TJSONObject*, именно поэтому вы получаете сообщение об ошибке.

Кроме того, GetValue<T>() возвращает часть пары value , а неСама пара.Таким образом, вам нужно присвоить возвращенный указатель переменной 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");
}
...