json库 number类型解析

语法子集及解析思路:

在这里插入图片描述
number由负号,整数,小数,指数组成,只有整数是必须的,正号是非法的。
小数由小数点后是1或多个数字组成,指数由e/E后1或多个数字组成。

解析思路
在这里插入图片描述
先解析负号,然后解析0或者1后接n个数字,再解析小数,指数,最后再自行校验格式(strtod能转换json不支持的格式并返回错误代码)+strtod将字符串转至浮点数并存入结果。

实现过程及遇到的问题;

解释一下strtod函数:有两个参数,第一个是传入字符串str,第二个是字符指针ptr,被设置为指向str第一个数值后的下一个字符。
strtod作用是忽略空格,尽可能多的把字符串中的值转换为floating-point value。
举例看ptr指向的值,第一次运行完strtod指向20.30300后面的空格。

int main() {
   
    char str[30] = "20.30300 312 This is test";
    char
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在boost中,可以使用以下方法来判断JSON节点的类型: 1. 使用`is_null()`方法判断节点是否为null类型。 2. 使用`is_bool()`方法判断节点是否为bool类型。 3. 使用`is_number_integer()`方法判断节点是否为整数类型。 4. 使用`is_number_float()`方法判断节点是否为浮点数类型。 5. 使用`is_string()`方法判断节点是否为字符串类型。 6. 使用`is_array()`方法判断节点是否为数组类型。 7. 使用`is_object()`方法判断节点是否为对象类型。 例如,以下代码展示了如何使用boost来判断JSON节点的类型: ``` #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> #include <iostream> using boost::property_tree::ptree; using boost::property_tree::read_json; using boost::property_tree::write_json; int main() { std::string json_str = "{\"name\":\"Alice\",\"age\":20,\"is_student\":true,\"marks\":[80,85,90]}"; ptree json_tree; read_json(json_str, json_tree); if (json_tree.get_child_optional("name")) std::cout << "name: " << json_tree.get<std::string>("name") << std::endl; if (json_tree.get_child_optional("age")) std::cout << "age: " << json_tree.get<int>("age") << std::endl; if (json_tree.get_child_optional("is_student")) std::cout << "is_student: " << std::boolalpha << json_tree.get<bool>("is_student") << std::endl; if (json_tree.get_child_optional("marks")) { ptree marks = json_tree.get_child("marks"); if (marks.size() > 0) { std::cout << "marks: "; for (auto& mark : marks) std::cout << mark.second.get_value<int>() << " "; std::cout << std::endl; } } if (json_tree.empty()) std::cout << "JSON is empty!" << std::endl; return 0; } ``` 在上面的代码中,我们首先将一个JSON字符串解析为一个ptree对象,然后使用`get_child_optional()`方法获取节点,使用`get()`方法获取节点的值,并使用`is_null()`、`is_bool()`、`is_number_integer()`、`is_number_float()`、`is_string()`、`is_array()`、`is_object()`方法判断节点的类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值