记一个 json parser 的 bug 修复

auto str = {"float": 1};
json data = json::parse(str);

data["float"].float_value();    // 0
data["float"].int_value();      // 1

出现这个场景的情况在,Google Play 的商品里面返回了商品的价格,需要 / 1000000 的。
业务关系,我们把这个 产品 又包装成一个 json 字符串给上层逻辑处理。

结果就是当价格是整数的时候,即 1000000 * int(2) ,生成的字符串就是:

{
......
"priceValue": 2
}

关键代码:

class Json {
public:
    enum Type {
        NUL, INT, NUMBER, BOOL, STRING, ARRAY, OBJECT
    };

    Json(): _type(NUL), _valid(true) { }

    Json(int i): _type(INT), _d(i), _valid(true) { } // _i(i) 原本代码

    Json(double d): _type(NUMBER), _d(d), _valid(true) { }

    // @brief parse the string in as Json
    static Json parse(const std::string &in);

    int int_value() const; // return _i; 修改为 return (int)_d;
    int int_value(int default_value) const;

protected:

    union {
        double _d;
        bool _b;
        // int _i;  // 原本代码
    };
};

这样就如 Lua 中的值一样了,只用 double 表示数字。

你可能感兴趣的:(记一个 json parser 的 bug 修复)