如何解析简单的json字符串c++
How to parsing simple json in strings c++?
我有一个string
,它包含一个只包含string
s的小json
。我用stringstream
和boost::property_tree::read_json
来阅读。我已经看到这不是很快,而且,boost json解析器不是线程安全的(因为流)。所以我试着用另一种方式表达:
std::vector< std::string > fields;
std::vector< std::string > values;
int separator = -1;
int prevSeparator = 0;
int fieldBegin = 0;
int fieldEnd = 0;
int valueBegin = 0;
int valueEnd = 0;
int64 t0 = cv::getTickCount();
do
{
prevSeparator = separator + 1;
separator = jsonStream.substr(prevSeparator, jsonStream.size() - prevSeparator - 1).find_first_of(',') + prevSeparator;
std::string element = jsonStream.substr(prevSeparator, separator - prevSeparator);
int fvSeparator = element.find_first_of(':');
std::string field = element.substr(0, fvSeparator);
std::string value = element.substr(fvSeparator + 1, element.size() - fvSeparator - 1);
fieldBegin = field.find_first_of('"') + 1;
fieldEnd = field.find_last_of('"');
fields.push_back(field.substr(fieldBegin, fieldEnd - fieldBegin));
valueBegin = value.find_first_of('"') + 1;
valueEnd = value.find_last_of('"');
values.push_back(value.substr(valueBegin, valueEnd - valueBegin));
} while (prevSeparator - separator <= 0);
你认为它够好了吗?或者我需要改进什么?
如果我理解你对输入的描述,你有一个Json-Array包含字符串。这意味着,它从["
开始,然后是由","
分隔的字符串序列。最后是"]
。下面是一个高级算法:
- 按
"
分割输入,观察转义引号。 - 从末尾删除字符串
[
和]
(也可以在那里有空格)。 - 删除出现在所需字符串之间的字符串
,
(也可以在那里有空格)。 - 基于Json转义规则的不转义,以防有转义。