// // json.cpp // json // // Created by Sam Jaffe on 1/30/16. // Copyright © 2016 Sam Jaffe. All rights reserved. // #include "json.hpp" const json::value json::value::null_value{}; json::value& json::value::operator[](const size_t idx) { if (!is_array()) { data.set(); } array_jt & val = data.get(); if (val.size() <= idx) val.resize(idx+1); return val[idx]; } json::value const& json::value::operator[](const size_t idx) const { if (!is_array()) return null_value; array_jt const& val = data.get(); if (val.size() <= idx) return null_value; else return val[idx]; } json::value& json::value::operator[](std::string const& key) { if (!is_object()) { data.set(); } return data.get()[key]; } json::value const& json::value::operator[](std::string const& key) const { if (!is_object()) return null_value; object_jt const& val = data.get(); auto it = val.find(key); if (it != val.end()) { return it->second; } else { return null_value; } } json::value::string_jt const& json::value::as_string() const { return data.get(); } json::value::double_jt json::value::as_double() const { if (data.is()) { return data.get(); } else if (data.is()) { return static_cast(data.get()); } else if (data.is()) { return data.get() ? 1.0 : 0.0; } else { return 0.0; } } json::value::int_jt json::value::as_int() const { if (data.is()) { return static_cast(data.get()); } else if (data.is()) { return data.get(); } else if (data.is() && data.get() <= uint_jt(INT_JT_MAX)) { return static_cast(data.get()); } else if (data.is()) { return data.get() ? 1 : 0; } else { return 0; } } json::value::uint_jt json::value::as_uint() const { if (data.is()) { return static_cast(data.get()); } else if (data.is() && data.get() >= 0) { return data.get(); } else if (data.is()) { return data.get(); } else if (data.is()) { return data.get() ? 1 : 0; } else { return 0; } } json::value::bool_jt json::value::as_bool() const { if (data.is()) { return data.get() != 0; } else if (data.is()) { return data.get() != 0; } else if (data.is()) { return data.get() != 0; } else if (data.is()) { return data.get(); } else { return false; } }