diff --git a/json11.cpp b/json11.cpp index 6c33dc3..3ea51c1 100644 --- a/json11.cpp +++ b/json11.cpp @@ -214,9 +214,30 @@ class JsonString final : public Value { string as_string() const { return m_value; } const string &string_value() const override { return m_value; } bool bool_value() const override { return m_value != "" && m_value != "0"; } - double number_value() const override { size_t pos = 0; double v = std::stod(m_value, &pos); if (pos < m_value.length()) { v = 0; } return v; } - int64_ int64_value() const override { size_t pos = 0; int64_ v = std::stoll(m_value, &pos); if (pos < m_value.length()) { v = 0; } return v; } - uint64_ uint64_value() const override { size_t pos = 0; uint64_ v = std::stoull(m_value, &pos); if (pos < m_value.length()) { v = 0; } return v; } + double number_value() const override + { + char *endptr = NULL; + double v = strtod(m_value.c_str(), &endptr); + if (endptr < m_value.c_str()+m_value.length()) + v = 0; + return v; + } + int64_ int64_value() const override + { + char *endptr = NULL; + int64_ v = strtoll(m_value.c_str(), &endptr, 10); + if (endptr < m_value.c_str()+m_value.length()) + v = 0; + return v; + } + uint64_ uint64_value() const override + { + char *endptr = NULL; + uint64_ v = strtoull(m_value.c_str(), &endptr, 10); + if (endptr < m_value.c_str()+m_value.length()) + v = 0; + return v; + } public: explicit JsonString(const string &value) : Value(value) {} explicit JsonString(string &&value) : Value(move(value)) {}