c++ - 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' 使用不当
如何正确使用路径评估器?
解决方案
该tokens
字段是一个数组,而不是一个对象。因此,您需要请求 aTJSONArray
而GetValue<T>()
不是 a TJSONObject
。
但是,更重要的是,您请求的类型GetValue<T>()
需要是指针int
类型,因为您请求的是 JSON 类类型,而不是像or这样的内置类型String
。由于您请求的是 aTJSONObject
而不是 a TJSONObject*
,这就是您收到错误的原因。
此外,GetValue<T>()
返回 Pair 的值部分,而不是 Pair 本身。因此,您需要将返回的指针分配给一个TJSONArray*
变量(改为jpa
a 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");
}
推荐阅读
- pandas - 读取特定列并使用 csv 或 pandas 模块获取其他列
- swiftui - 在 GeometryReader 中 ZStack 对齐不居中?
- mongodb - 如果 $unset 运算符的结果导致空的嵌入文档,有没有办法让 Update 方法删除父字段
- reactjs - 如何更改材质 ui 选择菜单的下拉颜色?
- python - 如何在 Python 循环中删除文件
- vue.js - Vuex没有加载
- python - 将从 api 收集的数据转换为 pandas 数据框
- python - 如何使用 geopandas 和 bokeh 制作自定义颜色条和 fill_color
- html - 使图像适合兄弟 div 下方的剩余空间
- javascript - React Private Route 在刷新登录之前重定向