15#include <unordered_map>
26 namespace fs = std::filesystem;
80 if (std::holds_alternative<T>(
value))
82 return std::get<T>(
value);
91 if (std::holds_alternative<T>(
value))
93 return std::get<T>(
value);
103 if (std::holds_alternative<T>(
value))
120 template<
typename T,
typename = std::enable_if_t<std::is_
integral_v<T>>>
125 if (!std::holds_alternative<std::vector<Json>>(
value))
127 value = std::vector<Json>{};
131 auto& vec = std::get<std::vector<Json>>(
value);
132 if (index >=
static_cast<int>(vec.size()))
134 vec.resize(index + 1);
142 if (!std::holds_alternative<std::unordered_map<std::string, Json>>(
value))
144 value = std::unordered_map<std::string, Json>{};
147 return std::get<std::unordered_map<std::string,Json>>(
value)[_key];
159 void Write(
const fs::path& _fileName,
const fs::path& _directry =
"./jsonFiles")
161 if (
value.index() < 5)
167 if (!fs::exists(_directry))
171 fs::create_directories(_directry);
173 catch (
const fs::filesystem_error& e)
181 fs::path filePass = _directry;
184 filePass /= _fileName;
186 filePass.replace_extension(
".json");
188 std::ofstream file(filePass, std::ios::out | std::ios::trunc);
206 void Write(std::ofstream& _file,
unsigned int _depth = 0)
228 std::visit([&](
auto&& arg)
230 using T = std::decay_t<
decltype(arg)>;
232 if constexpr (std::is_same_v<T, std::nullptr_t>)
236 else if constexpr (std::is_same_v<T, bool>)
238 _file << (arg ?
"true" :
"false");
240 else if constexpr (std::is_same_v<T, int> || std::is_same_v<T, float>)
242 _file << std::to_string(arg);
248 void WriteText(std::ofstream& _file,
unsigned int _depth = 0)
255 _file <<
"\"" + std::get<std::string>(
value) +
"\"";
276 for (
auto& element : std::get<std::unordered_map<std::string, Json>>(
value))
290 _file <<
"\"" + element.first +
"\"" +
" : ";
292 element.second.Write(_file, _depth);
302 void WriteArray(std::ofstream& _file,
unsigned int _depth = 0)
310 for (
auto& element : std::get<std::vector<Json>>(
value))
324 element.Write(_file, _depth);
342 _file << std::string(_depth,
'\t');
356 std::unordered_map<std::string, Json>,
384 _jsonFile.replace_extension(
".json");
386 if (!fs::exists(_jsonFile))
392 std::ifstream file(_jsonFile);
399 jsonFile = std::string(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>());
434 str.erase(std::remove_if(str.begin(), str.end(),
435 [](
char c) { return (c < 32); }), str.end());
567 else if (str ==
"false")
571 else if (str.find(
".") != std::string::npos || !str.empty() && str.back() ==
'f')
573 if (!str.empty() && str.back() ==
'f') {
577 return Json(std::stof(str));
581 return Json(std::stoi(str));
593 std::string
Trim(
const std::string& str)
595 size_t first = str.find_first_not_of(
" \t\n\r");
596 if (first == std::string::npos)
599 size_t last = str.find_last_not_of(
" \t\n\r");
600 return str.substr(first, (last - first + 1));
static void PrintAssertStatic(const std::string _in)
エラー出力用コンソール出力(文字色しか変わらない)
Definition Debug.cpp:152
Jsonデータを取り扱うクラス
Definition Json.hpp:35
std::variant< std::nullptr_t, bool, int, float, std::string, std::unordered_map< std::string, Json >, std::vector< Json > > Value
値を管理する共用体
Definition Json.hpp:349
Json & operator[](const std::string &_key)
Definition Json.hpp:140
Json & operator=(Json &&other) noexcept=default
Json & operator=(const Json &other)
Definition Json.hpp:68
void WriteArray(std::ofstream &_file, unsigned int _depth=0)
Definition Json.hpp:302
Json()
Definition Json.hpp:38
void WriteJsonDepth(std::ofstream &_file, unsigned int _depth=0)
Definition Json.hpp:334
const int TEXT_INDEX
Definition Json.hpp:360
const bool IsType()
Definition Json.hpp:101
Json(float _float)
Definition Json.hpp:53
Json(const Json &other)=default
void WriteObject(std::ofstream &_file, unsigned int _depth=0)
Definition Json.hpp:260
Json(int _int)
Definition Json.hpp:58
Json(bool _bool)
Definition Json.hpp:48
void Write(const fs::path &_fileName, const fs::path &_directry="./jsonFiles")
自身をJsonファイルとして書き込みます
Definition Json.hpp:159
T & Get()
Definition Json.hpp:89
const T & Get() const
Definition Json.hpp:78
Value value
Definition Json.hpp:362
void Write(std::ofstream &_file, unsigned int _depth=0)
Definition Json.hpp:206
Json(Json &&other) noexcept=default
Json & operator=(const T _in)
Definition Json.hpp:112
void WriteText(std::ofstream &_file, unsigned int _depth=0)
Definition Json.hpp:248
void WriteNotText(std::ofstream &_file, unsigned int _depth=0)
Definition Json.hpp:226
Json & operator[](const T _index)
Definition Json.hpp:121
Json(std::string _str)
Definition Json.hpp:43
Json ParseArray()
Definition Json.hpp:479
std::string jsonFile
Definition Json.hpp:372
Json Parse()
読み込んだJsonファイルを変換し、Jsonクラスとして返します
Definition Json.hpp:411
void CommaSkip()
Definition Json.hpp:611
std::string ParseString()
Definition Json.hpp:509
JsonParser(fs::path _jsonFile)
自身が取り扱うJsonファイルを読み込みます
Definition Json.hpp:381
bool isNumber(const std::string &str)
Definition Json.hpp:533
size_t pos
Definition Json.hpp:373
std::string Trim(const std::string &str)
Definition Json.hpp:593
std::string ParseNotString()
Definition Json.hpp:522
Json ParseImpl()
Definition Json.hpp:544
Json ParseObject()
Definition Json.hpp:438
void RemoveControlChars(std::string &str)
ASCII code 32以下の制御文字を削除する
Definition Json.hpp:432
void SpaceSkip()
Definition Json.hpp:603
Definition Accessor.hpp:110