Json写入特定类型数据,硬编码,尽可能少用隐式转换,否则难以维护
This commit is contained in:
parent
700e200c2d
commit
ffd61bf17d
123
Message/Json.cpp
123
Message/Json.cpp
|
@ -9,7 +9,6 @@ static const Json Null(nullptr);
|
||||||
// 构造只读实例
|
// 构造只读实例
|
||||||
Json::Json(cstring str) :_str(str) { }
|
Json::Json(cstring str) :_str(str) { }
|
||||||
Json::Json(cstring str, int len) : _str(str, len) { }
|
Json::Json(cstring str, int len) : _str(str, len) { }
|
||||||
|
|
||||||
Json::Json(const String& value) : _str(value) { }
|
Json::Json(const String& value) : _str(value) { }
|
||||||
|
|
||||||
// 值类型
|
// 值类型
|
||||||
|
@ -242,39 +241,98 @@ const Json Json::operator[](int index) const {
|
||||||
|
|
||||||
Json::Json() { }
|
Json::Json() { }
|
||||||
|
|
||||||
// 设置输出缓冲区
|
/*Json::Json(String& value) {
|
||||||
Json::Json(String& writer) :_str(writer) { }
|
_str = _str + "\"" + value + "\"";
|
||||||
|
}
|
||||||
|
|
||||||
Json::Json(bool value) : _str(value) { }
|
Json::Json(bool value) : _str(value) { }
|
||||||
Json::Json(int value) : _str(value) { }
|
Json::Json(int value) : _str(value) { }
|
||||||
Json::Json(float value) : _str(value) { }
|
Json::Json(float value) : _str(value) { }
|
||||||
Json::Json(double value) : _str(value) { }
|
Json::Json(double value) : _str(value) { }*/
|
||||||
|
|
||||||
|
// 设置输出缓冲区
|
||||||
|
Json::Json(char* buf, int len) :_str(buf, len, false) { _str.SetLength(0); }
|
||||||
|
|
||||||
// 添加对象成员
|
// 添加对象成员
|
||||||
Json& Json::Add(cstring key, const Json& value) {
|
Json& Json::Add(cstring key, const Json& value) {
|
||||||
auto& s = _str;
|
AddKey(key);
|
||||||
int len = s.Length();
|
|
||||||
// 如果已经有数据,则把最后的括号改为逗号
|
|
||||||
if (len > 0)
|
|
||||||
s[len - 1] = ',';
|
|
||||||
else
|
|
||||||
s += '{';
|
|
||||||
|
|
||||||
s += '"';
|
|
||||||
s += key;
|
|
||||||
s += "\":";
|
|
||||||
|
|
||||||
if (value.Type() == JsonType::null)
|
if (value.Type() == JsonType::null)
|
||||||
s += "null";
|
_str += "null";
|
||||||
else
|
else
|
||||||
s += value;
|
_str += value;
|
||||||
|
|
||||||
s += '}';
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 特殊处理字符串,避免隐式转换
|
Json& Json::Add(cstring key, cstring value) {
|
||||||
|
AddKey(key);
|
||||||
|
|
||||||
|
_str = _str + "\"" + value + "\"";
|
||||||
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json& Json::Add(cstring key, bool value) {
|
||||||
|
AddKey(key);
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
_str += "true";
|
||||||
|
else
|
||||||
|
_str += "false";
|
||||||
|
|
||||||
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json& Json::Add(cstring key, int value) {
|
||||||
|
AddKey(key);
|
||||||
|
|
||||||
|
_str += value;
|
||||||
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json& Json::Add(cstring key, float value) {
|
||||||
|
AddKey(key);
|
||||||
|
|
||||||
|
_str += value;
|
||||||
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json& Json::Add(cstring key, double value) {
|
||||||
|
AddKey(key);
|
||||||
|
|
||||||
|
_str += value;
|
||||||
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json& Json::Add(cstring key, const String& value) {
|
||||||
|
AddKey(key);
|
||||||
|
|
||||||
|
_str = _str + "\"" + value + "\"";
|
||||||
|
_str += key ? '}' : ']';
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Json& Json::Add(cstring value) { return Add(nullptr, value); }
|
||||||
|
Json& Json::Add(bool value) { return Add(nullptr, value); }
|
||||||
|
Json& Json::Add(int value) { return Add(nullptr, value); }
|
||||||
|
Json& Json::Add(float value) { return Add(nullptr, value); }
|
||||||
|
Json& Json::Add(double value) { return Add(nullptr, value); }
|
||||||
|
Json& Json::Add(const String& value) { return Add(nullptr, value); }
|
||||||
|
|
||||||
|
/*// 特殊处理字符串,避免隐式转换
|
||||||
Json& Json::Add(cstring key, const String& value) {
|
Json& Json::Add(cstring key, const String& value) {
|
||||||
auto& s = _str;
|
auto& s = _str;
|
||||||
int len = s.Length();
|
int len = s.Length();
|
||||||
|
@ -295,10 +353,10 @@ Json& Json::Add(cstring key, const String& value) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Json& Json::Add(cstring key, cstring value) { return Add(key, String(value)); }
|
Json& Json::Add(cstring key, cstring value) { return Add(key, String(value)); }*/
|
||||||
|
|
||||||
// 添加数组成员
|
// 添加数组成员
|
||||||
Json& Json::Add(const Json& value) {
|
/*Json& Json::Add(const Json& value) {
|
||||||
auto& s = _str;
|
auto& s = _str;
|
||||||
int len = s.Length();
|
int len = s.Length();
|
||||||
// 如果已经有数据,则把最后的括号改为逗号
|
// 如果已经有数据,则把最后的括号改为逗号
|
||||||
|
@ -312,7 +370,7 @@ Json& Json::Add(const Json& value) {
|
||||||
s += ']';
|
s += ']';
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/*Json Json::AddObject(cstring key) {
|
/*Json Json::AddObject(cstring key) {
|
||||||
return Null;
|
return Null;
|
||||||
|
@ -322,6 +380,27 @@ Json Json::AddArray(cstring key) {
|
||||||
return Null;
|
return Null;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
// 添加键
|
||||||
|
void Json::AddKey(cstring key) {
|
||||||
|
// 数组没有key
|
||||||
|
auto& s = _str;
|
||||||
|
int len = s.Length();
|
||||||
|
// 如果已经有数据,则把最后的括号改为逗号
|
||||||
|
if (len > 0)
|
||||||
|
s[len - 1] = ',';
|
||||||
|
else if (key)
|
||||||
|
s += '{';
|
||||||
|
else
|
||||||
|
s += '[';
|
||||||
|
|
||||||
|
// 数组没有键和冒号
|
||||||
|
if (key) {
|
||||||
|
s += '"';
|
||||||
|
s += key;
|
||||||
|
s += "\":";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String Json::ToString() const { return _str; }
|
String Json::ToString() const { return _str; }
|
||||||
|
|
||||||
void Json::Show(bool newline) const {
|
void Json::Show(bool newline) const {
|
||||||
|
|
|
@ -50,29 +50,37 @@ public:
|
||||||
const Json operator[](int index) const;
|
const Json operator[](int index) const;
|
||||||
//Json& operator[](int index);
|
//Json& operator[](int index);
|
||||||
|
|
||||||
// 设置输出缓冲区
|
|
||||||
Json();
|
Json();
|
||||||
Json(String& writer);
|
/*Json(String& value);
|
||||||
Json(bool value);
|
Json(bool value);
|
||||||
Json(int value);
|
Json(int value);
|
||||||
Json(float value);
|
Json(float value);
|
||||||
Json(double value);
|
Json(double value);*/
|
||||||
|
// 设置输出缓冲区
|
||||||
|
Json(char* buf, int len);
|
||||||
|
|
||||||
// 添加成员
|
// 添加成员
|
||||||
/*Json& Add(cstring key, cstring value);
|
Json& Add(cstring key, cstring value);
|
||||||
Json& Add(cstring key, bool value);
|
Json& Add(cstring key, bool value);
|
||||||
Json& Add(cstring key, int value);
|
Json& Add(cstring key, int value);
|
||||||
Json& Add(cstring key, float value);
|
Json& Add(cstring key, float value);
|
||||||
Json& Add(cstring key, double value);*/
|
Json& Add(cstring key, double value);
|
||||||
|
Json& Add(cstring key, const String& value);
|
||||||
|
|
||||||
|
// 添加数组成员
|
||||||
|
//Json& Add(const Json& value);
|
||||||
|
Json& Add(cstring value);
|
||||||
|
Json& Add(bool value);
|
||||||
|
Json& Add(int value);
|
||||||
|
Json& Add(float value);
|
||||||
|
Json& Add(double value);
|
||||||
|
Json& Add(const String& value);
|
||||||
|
|
||||||
// 添加对象成员
|
// 添加对象成员
|
||||||
Json& Add(cstring key, const Json& value);
|
Json& Add(cstring key, const Json& value);
|
||||||
// 特殊处理字符串,避免隐式转换
|
// 特殊处理字符串,避免隐式转换
|
||||||
Json& Add(cstring key, const String& value);
|
//Json& Add(cstring key, cstring value);
|
||||||
Json& Add(cstring key, cstring value);
|
|
||||||
//Json AddObject(cstring key);
|
//Json AddObject(cstring key);
|
||||||
// 添加数组成员
|
|
||||||
Json& Add(const Json& value);
|
|
||||||
//Json AddArray(cstring key);
|
|
||||||
|
|
||||||
String ToString() const;
|
String ToString() const;
|
||||||
void Show(bool newline = false) const;
|
void Show(bool newline = false) const;
|
||||||
|
@ -85,6 +93,7 @@ private:
|
||||||
String _str;
|
String _str;
|
||||||
|
|
||||||
Json Find(cstring key) const;
|
Json Find(cstring key) const;
|
||||||
|
void AddKey(cstring key);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -94,7 +94,7 @@ static void TestWrite()
|
||||||
json["score"] = 3.14159;*/
|
json["score"] = 3.14159;*/
|
||||||
json.Add("id", 3141);
|
json.Add("id", 3141);
|
||||||
json.Add("name", "Smart \\\" Stone");
|
json.Add("name", "Smart \\\" Stone");
|
||||||
json.Add("enable", "true");
|
json.Add("enable", true);
|
||||||
json.Add("noval", nullptr);
|
json.Add("noval", nullptr);
|
||||||
json.Add("score", 3.14159);
|
json.Add("score", 3.14159);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue