如何解析简单的json字符串c++

How to parsing simple json in strings c++?

本文关键字:字符串 c++ json 何解析 简单      更新时间:2023-10-16

我有一个string,它包含一个只包含string s的小json。我用stringstreamboost::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包含字符串。这意味着,它从["开始,然后是由","分隔的字符串序列。最后是"]。下面是一个高级算法:

  1. "分割输入,观察转义引号。
  2. 从末尾删除字符串[](也可以在那里有空格)。
  3. 删除出现在所需字符串之间的字符串,(也可以在那里有空格)。
  4. 基于Json转义规则的不转义,以防有转义。