C++ RapidJSON 解析包装在回调函数中的 JSON 对象

C++ RapidJSON parse a JSON object wrapped in a callback function

本文关键字:函数 JSON 对象 回调 RapidJSON 包装 C++      更新时间:2023-10-16

我正在尝试使用C++中的RapidJSON库解析来自雅虎API的JSON响应,并且此响应包装在回调方法中。这是我得到的回应

YAHOO.util.ScriptNodeDataSource.callbacks({"ResultSet":{"Query":"AMZN","Result":[{"symbol":"AMZN","name":"Amazon.com, Inc.","exch":"NMS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"AMZN.MX","name":"Amazon.com, Inc.","exch":"MEX","type":"S","exchDisp":"Mexico","typeDisp":"Equity"}]}});

如果我像这样将此 JSON 响应直接提供给 RapidJSON,它将无法解析它。

rapidjson::Document json_doc;
if (json_doc.Parse(fetched_data.c_str()).HasParseError()) {
        continue;
}

那么,除了完全删除此子字符串的明显方法之外,使用此回调函数部分解析 JSON 的方法是什么YAHOO.util.ScriptNodeDataSource.callbacks

你可以假 Null );部分,并在回调部分之后给出一个指针:

size_t pos = std::string("YAHOO.util.ScriptNodeDataSource.callbacks(").size();
std::string stringifiedJSON = "YAHOO.util.ScriptNodeDataSource.callbacks({"ResultSet": /*...*/ });"
str[str.size() - 2] = 0; // null terminate exactly on ");"
const char* ptr = stringifiedJSON.data();
ptr += pos;
json::Document doc;
doc.parse(ptr);
str[str.size() - 2] = ')'; //revert the string back;