形式上来说,JSON 字符串可能包含转义字符,例如“\n”、“\u20AC”。
要处理所有这些情况,您将需要一个 JSON 解析器来解析 JSON 文本。
在您的应用程序中,可以使用 SAX 风格(基于事件)的 API,即从头到尾扫描 JSON 文件,而无需生成中间 DOM(文档对象模型)。
你可以查看rapidjson,它支持 SAX 风格的 API。
您可以编写一个 CSV 写入器,参考 $rapidjson::Writer$,从事件中输出 CSV 字符串。代码将如下所示:
CsvWriter writer(outputStream);
rapidjson::Reader reader;
reader.Parse<0>(inputStream, writer);
然后,reader 在解析输入流时会调用 writer 的成员函数。在您的示例中,它将按以下顺序调用函数:
writer.StartArray();
writer.StartArray();
writer.String("Bcode", 5, true);
writer.String("firstname", 9, true);
writer.String("lastname", 8, true);
writer.EndArray();
writer.StartArray();
writer.String("11234", 5, true);
writer.String("richard", 7, true);
writer.String("nixon", 5, true);
writer.EndArray();
writer.EndArray();
String() 的第二个参数是字符串的长度。第三个参数指示是否应该复制字符串。
使用这些函数调用写出您自己的 CSV 格式应该很容易。
最后,需要注意的是,使用 SAX 风格的 API 将需要更少的内存消耗,但处理程序可能比 DOM 版本更难编写。rapidjson 支持您选择的 SAX 和 DOM 样式 API。