以"SAX"方式使用 rapidjson 编写嵌套数组
Write nested arrays with rapidjson the "SAX" way
我正在尝试使用 rapidjson 以 sax 方式编写 json 结构。这是我的工作:
StringBuffer sb;
PrettyWriter<StringBuffer> writer(sb);
writer.StartObject();
writer.Key("user");
writer.StartArray();
OperatorAcPtrList::iterator xIt;
for (xIt = userList.begin(); xIt != userList.end(); xIt++)
{
writer.Key("userId");
writer.Uint((*xIt)->id);
writer.Key("productIdList");
writer.StartArray();
ProductIdList::iterator xPrdIdIt;
for (xPrdIdIt = ((*xIt)->productList).begin();
xPrdIdIt != ((*xIt)->productList).end(); xPrdIdIt++)
{
writer.Uint(*xPrdIdIt);
}
writer.EndArray();
}
writer.EndArray();
writer.EndObject();
但结果不是我所期望的,而是:
{
"userList": [
"userId",
20,
"productIdList",
[
1,
2
],
"userId",
21,
"productIdList",
[
1,
2
]
]
}
看起来第一个 StartArray EndArray 中的所有内容都变成了一个数组元素。相反,我想获得的是:
{
"userList": [
{
"userId" : 20,
"productIdList" : [1, 2],
},
{
"userId" : 21,
"productIdList" : [1, 2]
}
]
}
我做错了什么还是根本不支持我想要的东西?
在 for 循环中调用 writer.Key("userId");
之前,请添加 writer.StartObject();
,并相应地添加writer.EndObject();
。下面是一个示例:
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
using namespace rapidjson;
using namespace std;
int main() {
StringBuffer s;
Writer<StringBuffer> writer(s);
writer.StartObject();
writer.Key("userList");
writer.StartArray();
writer.StartObject();
writer.Key("userId");
writer.Uint(20);
writer.Key("productIdList");
writer.StartArray();
for (unsigned i = 1; i < 3; i++)
writer.Uint(i);
writer.EndArray();
writer.EndObject();
writer.StartObject();
writer.Key("userId");
writer.Uint(21);
writer.Key("productIdList");
writer.StartArray();
for (unsigned i = 1; i < 3; i++)
writer.Uint(i);
writer.EndArray();
writer.EndObject();
writer.EndArray();
writer.EndObject();
cout << s.GetString() << endl;
}
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- C++:带有 "auto" 的二维数组上的嵌套 For 循环
- 获取嵌套的 JSON 数组和矩阵C++
- 使用嵌套函数数组是个好主意吗?
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 具有动态数组分配的OpenMP嵌套循环
- 比较嵌套 for 循环中的两个 wchar 数组?
- 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?
- 将嵌套的 std::arrays 视为具有链式 .data() 的单个平面数组
- 用于在一维数组上嵌套循环操作的正确 openmp 指令
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 数组嵌套的代理
- C 无法使用嵌套环将数组的元素索引
- 嵌套在功能数组中的循环
- 嵌套调用中的数组运算符 (->) 重载
- C 从嵌套循环中的文件中读取,并将值分配给二维数组
- 如何初始化嵌套结构数组
- 如何使用嵌套的 if 语句检查字符数组
- 在与 OpenMP 并行的嵌套 for 循环中写入共享数组(通过指针)如何产生错误的结果