【发布时间】:2021-08-06 11:27:54
【问题描述】:
我从 API 获取 JSON {"Success":true,"Error":null,"Result":null} 对象,并且我使用字符串流来提取我需要的数据。这个对象在下面的代码中被传递为temp
我知道有一些库可用于处理 JSON,但我想在不使用库的情况下解析它。
我曾推荐过How to deserialize json string in c++ without using any third party library。在我遇到特殊字符之前它运行良好。
std::stringstream ss(temp); //Using Json response stream
const unsigned int BUFFERSIZE = 1087;
//temporary buffer
char buffer[BUFFERSIZE];
memset(buffer, 0, BUFFERSIZE * sizeof(char));
std::pair<std::string, std::string> returnValue;
while (ss.peek() != '{')
{
ss.ignore();
}
while (ss.peek() != '}' && value == "")
{
ss.get(buffer, BUFFERSIZE, '\"');
ss.ignore();
ss.get(buffer, BUFFERSIZE, '\"');
ss.ignore();
returnValue.first = buffer;
ss.get(buffer, BUFFERSIZE, ':');
ss.ignore();
ss.get(buffer, BUFFERSIZE, ',');
ss.ignore();
returnValue.second = buffer;
cout << returnValue.second;
if (returnValue.first == "Success") {
value = buffer;
}
}
我正在尝试提取介于":" 和"," 之间的值true,但我得到一个空字符串。
我错过了什么吗?
【问题讨论】:
-
请注意,相同的
buffer会传递给所有get调用。 -
如果你删除
ss.get(buffer, BUFFERSIZE, ':');,它会起作用,但我不知道为什么...... -
似乎
ss.get(buffer, BUFFERSIZE, ':');,当 ss 中的第一个字符是:时,并没有删除 nothing(因为它应该这样做),它吃掉了整个ss、冒号和所有的内容。这似乎不是特定于 ':',如果我们使用另一个字符就会发生。这可能是stringstream::get中的错误吗? -
如果你“想在不使用库的情况下解析它”,那么不要“我参考过......”
标签: c++ json parsing stringstream