簡體   English   中英

如何在字符串C ++中解析簡單的json?

[英]How to parsing simple json in strings c++?

我有一個string ,其中包含一個僅包含string的小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轉義規則取消轉義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM