找到一些单词后如何解析数字
How to parse number after finding some word
我想解析未提及的JSON并从中提取 生产年份值
auto data = {
"cars" : [
{
"name" : "BMW",
"engine" : 3.0
},
{
"name" : "Citroen",
"engine" : 3.6
},
{
"name" : "Ferrari",
"engine" : 4.2
}
],
"productionYear" : 1999
}
我有以下规则:
using boost::spirit::ascii::string;
using boost::spirit::omit;
using boost::spirit::qi::lit;
using boost::spirit::qi::char_;
boost::spirit::qi::rule<std::string::iterator, int()> production_;
production_ = omit[*(char_ - "productionYear") >>
lit('"') >> lit(' ') >> lit(':') >> lit(' ')] >> int_;
int year;
auto it = data.begin();
if (boost::spirit::qi::parse(it, data.end(), production_, year))
{
std::cout << "Parse finished with succeded status"
<< std::distance(data.begin(), it);
}
解析器失败,最后一个迭代器位置:0
谁能告诉我我做错了什么?
免責聲明
不要这样做。使用 JSON 解析器。有很多。你的语法在无数方面都很脆弱。(您将在另一个值内
productionYear
停止,作为较长键中的部分匹配,作为嵌套/同级对象的属性,UNICODE 转义,转义。您将不允许有效的 JSON 可选空格等(。请参阅此处,了解在 Spirit 中解析 JSON 所需的条件,以合理程度:https://github.com/sehe/spirit-v2-json/blob/master/json.cpp
*(char_ - "productionYear")
解析任何文本,直至(但不包括(productionYear
。
这意味着下一个字符永远不会匹配'"'
(因为它是'p'
(。
一个直接的解决方法是
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main() {
std::string const data = R"({
"cars": [{
"name": "BMW",
"engine": 3.0
},
{
"name": "Citroen",
"engine": 3.6
},
{
"name": "Ferrari",
"engine": 4.2
}],
"productionYear" : 1999
})";
boost::spirit::qi::rule<std::string::const_iterator, int()> production_;
production_ = qi::omit[+(qi::char_ - "productionYear") >> "productionYear"" >> ' ' >> ':' >> ' '] >> qi::int_;
int year;
auto it = data.begin(), last = data.end();
if (qi::parse(it, last, production_, year)) {
std::cout << "Parsed: " << year << "n";
} else {
std::cout << "Parsed failedn";
}
if (it != last)
std::cout << "Remaining input: '" << std::string(it, last) << "'n";
}
住在科里鲁
输出:
Parsed: 1999
Remaining input: '
}'
相关文章:
- C++中的 Json:将数字解析为字符串以避免浮点不准确
- Spirit X3:自定义数字解析器在结果中产生意外的前导零
- 一个数字的提升精神解析器的分段错误
- C++ - 从标准::字符串解析数字
- 用std :: Regex通过DOT解析数字
- 找到一些单词后如何解析数字
- 是否有适用于迭代器的数字解析函数
- C++ 当数字文字是参数时,最令人烦恼的解析?
- 如何解析小数分离器为结肠的数字的字符串表示:
- 仅使用关键字和数字提取来解析简单语法
- bignumber.h arduino如何解析大于10位数字的数字
- 当区域设置需要"3,14"时,如何使用scanf解析像"3.14"这样的数字
- 如果 C++ stdlib 流的解析数字紧跟非空格字符,如何引发错误
- 使用boost::spirit::qi来解析带有分隔符的数字
- 如果字符串中没有空格,如何解析带有数字和字符的字符串并分隔数字和字符
- 解析数字直到逗号
- String Stream in C++ 解析单词和数字字符串
- 无法从stringstream中解析数字并正确输出
- 解析数字列表的最佳方法
- 如何在C++中解析数字表