Json读取单元测试通过

This commit is contained in:
nnhy 2016-09-14 10:49:06 +00:00
parent a9e4013f4f
commit ede985a54f
3 changed files with 13 additions and 12 deletions

View File

@ -1,6 +1,6 @@
#include "Json.h" #include "Json.h"
static Json Null; static const Json Null;
Json::Json() { Init(nullptr, 0); } Json::Json() { Init(nullptr, 0); }
@ -11,7 +11,8 @@ Json::Json(cstring str)
void Json::Init(cstring str, int len) void Json::Init(cstring str, int len)
{ {
_str = str;
_len = len;
} }
// 值类型 // 值类型
@ -38,7 +39,7 @@ JsonType Json::Type() const
{ {
char ch = _str[i]; char ch = _str[i];
// 判断非数字 // 判断非数字
if(ch < '0' && ch > '9') if(ch < '0' || ch > '9')
{ {
// 负号只能出现在第一位 // 负号只能出现在第一位
if(ch == '-' && i > 0) return JsonType::null; if(ch == '-' && i > 0) return JsonType::null;
@ -51,7 +52,7 @@ JsonType Json::Type() const
} }
} }
return isFloat ? JsonType::integer : JsonType::Float; return isFloat ? JsonType::Float : JsonType::integer;
} }
// 获取值 // 获取值
@ -185,7 +186,8 @@ int readString(cstring str, int len)
// 读取成员。找到指定成员,并用它的值构造一个新的对象 // 读取成员。找到指定成员,并用它的值构造一个新的对象
Json Json::operator[](cstring key) const Json Json::operator[](cstring key) const
{ {
if(!_str && !_len) return Json::Null; Json json;
if(!_str && !_len) return json;
String s((cstring)_str, _len); String s((cstring)_str, _len);
@ -196,7 +198,7 @@ Json Json::operator[](cstring key) const
int p = 0; int p = 0;
while(true){ while(true){
p = s.IndexOf(key, p); p = s.IndexOf(key, p);
if(p < 0) return Json::Null; if(p < 0) return json;
p += n; p += n;
@ -228,17 +230,16 @@ Json Json::operator[](cstring key) const
} }
} }
Json json;
json.Init(val, n); json.Init(val, n);
return json; return json;
} }
// 设置成员。找到指定成员,或添加成员,并返回对象 // 设置成员。找到指定成员,或添加成员,并返回对象
Json& Json::operator[](cstring key) /*Json& Json::operator[](cstring key)
{ {
return *this; return *this;
} }*/
// 特殊支持数组 // 特殊支持数组
int Json::Length() const int Json::Length() const

View File

@ -43,7 +43,7 @@ public:
// 读取成员。找到指定成员,并用它的值构造一个新的对象 // 读取成员。找到指定成员,并用它的值构造一个新的对象
Json operator[](cstring key) const; Json operator[](cstring key) const;
// 设置成员。找到指定成员,或添加成员,并返回对象 // 设置成员。找到指定成员,或添加成员,并返回对象
Json& operator[](cstring key); //Json& operator[](cstring key);
// 特殊支持数组 // 特殊支持数组
int Length() const; int Length() const;

View File

@ -27,7 +27,7 @@ static void TestRead()
assert(name.Type() == JsonType::string, "Type()"); assert(name.Type() == JsonType::string, "Type()");
auto enable = json["enable"]; auto enable = json["enable"];
assert(id.Type() == JsonType::boolean, "Type()"); assert(enable.Type() == JsonType::boolean, "Type()");
auto noval = json["noval"]; auto noval = json["noval"];
assert(noval.Type() == JsonType::null, "Type()"); assert(noval.Type() == JsonType::null, "Type()");
@ -44,7 +44,7 @@ static void TestRead()
void Json::Test() void Json::Test()
{ {
TS("TestList"); TS("TestJson");
debug_printf("TestJson......\r\n"); debug_printf("TestJson......\r\n");