689 lines
15 KiB
C++
689 lines
15 KiB
C++
|
#include "Json.h"
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int Json::insertObj(const CString JsonStr, Json& json)
|
|||
|
{
|
|||
|
int nLen = 0, pos = 0;
|
|||
|
CString key, NowStr;
|
|||
|
for (int i = 0; i < JsonStr.GetLength(); i++)
|
|||
|
{
|
|||
|
NowStr = JsonStr.GetAt(i);
|
|||
|
switch (pos)
|
|||
|
{
|
|||
|
case 0://<2F>ж<EFBFBD><D0B6>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD>{<7B><>ͷ
|
|||
|
if (NowStr == _T("{"))
|
|||
|
{
|
|||
|
pos = 1;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" "))
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 1://<2F>õ<EFBFBD>Keyֵ
|
|||
|
if (NowStr == _T("\""))
|
|||
|
{
|
|||
|
i = GetValue(JsonStr, i, key);
|
|||
|
if (i == -1)
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
pos = 2;
|
|||
|
}
|
|||
|
else if (NowStr == _T("}"))
|
|||
|
{
|
|||
|
return i;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" "))
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 2://<2F>ж<EFBFBD>Keyֵ<79><D6B5><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>:<3A><>
|
|||
|
if (NowStr == _T(":"))
|
|||
|
{
|
|||
|
pos = 3;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" "))
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 3://<2F>õ<EFBFBD>ֵ
|
|||
|
if (NowStr == _T("\""))
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
|||
|
Json m_json;
|
|||
|
i = GetValue(JsonStr, i, m_json.value);
|
|||
|
if (i == -1)
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
m_json.type = 3;
|
|||
|
json.valueMap[key] = m_json;
|
|||
|
pos = 4;
|
|||
|
}
|
|||
|
else if (NowStr == _T("["))
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
int a = insertArr(JsonStr.Right(JsonStr.GetLength() - i), m_json);
|
|||
|
if (a == -1)
|
|||
|
return -1;
|
|||
|
json.valueMap[key] = m_json;
|
|||
|
i += a;
|
|||
|
pos = 4;
|
|||
|
}
|
|||
|
else if (NowStr == _T("{"))
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
int a = insertObj(JsonStr.Right(JsonStr.GetLength() - i), m_json);
|
|||
|
if (a == -1)
|
|||
|
return -1;
|
|||
|
json.valueMap[key] = m_json;
|
|||
|
i += a;
|
|||
|
pos = 4;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" ") && NowStr != _T("\r") && NowStr != _T("\n") && NowStr != _T("\t"))
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
int a = insertNum(JsonStr.Right(JsonStr.GetLength() - i), m_json);
|
|||
|
if (a == -1)
|
|||
|
return -1;
|
|||
|
i += a - 1;
|
|||
|
json.valueMap[key] = m_json;
|
|||
|
pos = 4;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 4://<2F>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ֵ
|
|||
|
if (NowStr == _T(","))
|
|||
|
{
|
|||
|
pos = 1;
|
|||
|
}
|
|||
|
else if (NowStr == _T("}"))
|
|||
|
{
|
|||
|
return i;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" "))
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
return -1;
|
|||
|
}
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int Json::insertArr(const CString JsonStr, Json& json)
|
|||
|
{
|
|||
|
json.type = 2;
|
|||
|
int pos = 0;
|
|||
|
CString NowStr;
|
|||
|
int len = JsonStr.GetLength();
|
|||
|
for (int i = 1; i < len; i++)
|
|||
|
{
|
|||
|
NowStr = JsonStr.GetAt(i);
|
|||
|
switch (pos)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
if (NowStr == _T("{"))
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
int a = insertObj(JsonStr.Right(JsonStr.GetLength() - i), m_json);
|
|||
|
if (a == -1)
|
|||
|
return -1;
|
|||
|
i += a;
|
|||
|
pos = 1;
|
|||
|
json.valueVector.push_back(m_json);
|
|||
|
}
|
|||
|
else if (NowStr == _T("\""))
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
i = GetValue(JsonStr, i, m_json.value);
|
|||
|
if (i == -1)
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
m_json.type = 3;
|
|||
|
pos = 1;
|
|||
|
json.valueVector.push_back(m_json);
|
|||
|
}
|
|||
|
else if (NowStr == _T("["))
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
int a = insertArr(JsonStr.Right(JsonStr.GetLength() - i), m_json);
|
|||
|
if (a == -1)
|
|||
|
return -1;
|
|||
|
i += a;
|
|||
|
pos = 1;
|
|||
|
json.valueVector.push_back(m_json);
|
|||
|
}
|
|||
|
else if (NowStr == _T("]"))
|
|||
|
{
|
|||
|
return i;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" "))
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Json m_json;
|
|||
|
int a = insertNum(JsonStr.Right(JsonStr.GetLength() - i), m_json);
|
|||
|
if (a == -1)
|
|||
|
return -1;
|
|||
|
i += a - 1;
|
|||
|
json.valueVector.push_back(m_json);
|
|||
|
pos = 1;
|
|||
|
}
|
|||
|
else if (NowStr == _T("]"))
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return i;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 1://<2F>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (NowStr == _T(","))
|
|||
|
{
|
|||
|
pos = 0;
|
|||
|
}
|
|||
|
else if (NowStr == _T("]"))
|
|||
|
{
|
|||
|
return i;
|
|||
|
}
|
|||
|
else if (NowStr != _T(" "))
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
return -1;
|
|||
|
}
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int Json::insertNum(CString str, Json& json)
|
|||
|
{
|
|||
|
if (str.Find(_T("true")) == 0)
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD>true
|
|||
|
json.type = 5;
|
|||
|
json.value = _T("true");
|
|||
|
return 4;
|
|||
|
}
|
|||
|
else if (str.Find(_T("false")) == 0)
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD>false
|
|||
|
json.type = 5;
|
|||
|
json.value = _T("false");
|
|||
|
return 5;
|
|||
|
}
|
|||
|
else if (str.Find(_T("null")) == 0)
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD>null
|
|||
|
json.type = 6;
|
|||
|
json.value = _T("null");
|
|||
|
return 4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CString tmpStr, NowStr;
|
|||
|
BOOL isFloat = FALSE;
|
|||
|
int len = str.GetLength();
|
|||
|
for (int i = 0; i < len; i++)
|
|||
|
{
|
|||
|
NowStr = str.GetAt(i);
|
|||
|
if (i == 0 && NowStr == _T("-"))
|
|||
|
{
|
|||
|
tmpStr += NowStr;
|
|||
|
continue;
|
|||
|
}
|
|||
|
if (NowStr == "0" || NowStr == "1" || NowStr == "2" || NowStr == "3" || NowStr == "4" || NowStr == "5" || NowStr == "6" || NowStr == "7" || NowStr == "8" || NowStr == "9")
|
|||
|
{
|
|||
|
//<2F>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
tmpStr += NowStr;
|
|||
|
continue;
|
|||
|
}
|
|||
|
else if (NowStr == _T("."))
|
|||
|
{
|
|||
|
if (isFloat == FALSE)
|
|||
|
{
|
|||
|
isFloat = TRUE;
|
|||
|
tmpStr += NowStr;
|
|||
|
continue;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return -1;
|
|||
|
}
|
|||
|
}
|
|||
|
json.type = 4;
|
|||
|
json.value = tmpStr;
|
|||
|
return i;
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int Json::GetValue(CString jsonStr, int Begin, CString& value)
|
|||
|
{
|
|||
|
CString NowStr;
|
|||
|
int nlen, len = Begin;
|
|||
|
nlen = jsonStr.Find(_T("\""), Begin + 1);
|
|||
|
while (nlen != -1)
|
|||
|
{
|
|||
|
NowStr = jsonStr.GetAt(nlen - 1);
|
|||
|
if (NowStr != _T("\\"))
|
|||
|
{
|
|||
|
value = jsonStr.Mid(Begin + 1, nlen - Begin - 1);
|
|||
|
return nlen;
|
|||
|
}
|
|||
|
len = nlen;
|
|||
|
nlen = jsonStr.Find(_T("\""), len + 1);
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
Json::~Json()
|
|||
|
{
|
|||
|
type = 0;
|
|||
|
valueMap.clear();
|
|||
|
valueVector.clear();
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int Json::parse(CStringA str)
|
|||
|
{
|
|||
|
CString JsonStr;
|
|||
|
JsonStr = str;
|
|||
|
int len = parse(JsonStr);
|
|||
|
if (len == -1)
|
|||
|
return -1;
|
|||
|
return ((CStringA)JsonStr.Left(len)).GetLength();
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int Json::parse(CStringW JsonStr)
|
|||
|
{
|
|||
|
valueMap.clear();
|
|||
|
valueVector.clear();
|
|||
|
CString TmpStr = JsonStr;
|
|||
|
int nLen = 0, len = -1;
|
|||
|
TmpStr.Replace(_T("\r"), _T(" "));
|
|||
|
TmpStr.Replace(_T("\n"), _T(" "));
|
|||
|
TmpStr.Replace(_T("\t"), _T(" "));
|
|||
|
TmpStr = TmpStr.TrimLeft();
|
|||
|
nLen = JsonStr.GetLength() - TmpStr.GetLength();
|
|||
|
if (TmpStr.Find(_T("{")) == 0)
|
|||
|
{
|
|||
|
len = insertObj(TmpStr, *this);
|
|||
|
}
|
|||
|
else if (TmpStr.Find(_T("[")) == 0)
|
|||
|
{
|
|||
|
len = insertArr(TmpStr, *this);
|
|||
|
}
|
|||
|
if (len == -1)
|
|||
|
{
|
|||
|
valueMap.clear();
|
|||
|
if (valueVector.size() != 0)
|
|||
|
valueVector.clear();
|
|||
|
value = _T("");
|
|||
|
return -1;
|
|||
|
}
|
|||
|
nLen += len + 1;
|
|||
|
return nLen;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
Json& Json::operator[](int JsonInt)
|
|||
|
{
|
|||
|
if (JsonInt >= valueVector.size())
|
|||
|
{
|
|||
|
return valueMap.end()->second;
|
|||
|
}
|
|||
|
return valueVector[JsonInt];
|
|||
|
}
|
|||
|
|
|||
|
Json& Json::operator[](CStringW JsonStr)
|
|||
|
{
|
|||
|
int len = JsonStr.Find(_T("\""));
|
|||
|
CStringW str;
|
|||
|
while (len != -1)
|
|||
|
{
|
|||
|
if (len == 0)
|
|||
|
{
|
|||
|
str += _T("\\\"");
|
|||
|
}
|
|||
|
else if (JsonStr.GetAt(len - 1) != _T('\\'))
|
|||
|
{
|
|||
|
str = str + JsonStr.Left(len) + _T("\\\"");
|
|||
|
}
|
|||
|
JsonStr.Delete(0, len + 1);
|
|||
|
len = JsonStr.Find(_T("\""));
|
|||
|
}
|
|||
|
str += JsonStr;
|
|||
|
return valueMap[str];
|
|||
|
}
|
|||
|
|
|||
|
Json& Json::operator[](CStringA JsonStr)
|
|||
|
{
|
|||
|
int len = JsonStr.Find("\"");
|
|||
|
CStringA str;
|
|||
|
while (len != -1)
|
|||
|
{
|
|||
|
if (len == 0)
|
|||
|
{
|
|||
|
str += "\\\"";
|
|||
|
}
|
|||
|
else if (JsonStr.GetAt(len - 1) != '\\')
|
|||
|
{
|
|||
|
str = str + JsonStr.Left(len) + "\\\"";
|
|||
|
}
|
|||
|
JsonStr.Delete(0, len + 1);
|
|||
|
len = JsonStr.Find("\"");
|
|||
|
}
|
|||
|
str += JsonStr;
|
|||
|
return valueMap[(CString)str];
|
|||
|
}
|
|||
|
|
|||
|
void Json::operator=(int JsonInt)
|
|||
|
{
|
|||
|
type = 4;
|
|||
|
value.Format(_T("%d"), JsonInt);
|
|||
|
valueMap.clear();
|
|||
|
if (valueVector.size() != 0)
|
|||
|
valueVector.clear();
|
|||
|
}
|
|||
|
|
|||
|
void Json::operator=(CStringA JsonStr)
|
|||
|
{
|
|||
|
type = 3;
|
|||
|
valueMap.clear();
|
|||
|
if (valueVector.size() != 0)
|
|||
|
valueVector.clear();
|
|||
|
int len = JsonStr.Find("\"");
|
|||
|
CStringA str;
|
|||
|
while (len != -1)
|
|||
|
{
|
|||
|
if (len == 0)
|
|||
|
{
|
|||
|
str += "\\\"";
|
|||
|
}
|
|||
|
else if (JsonStr.GetAt(len - 1) != '\\')
|
|||
|
{
|
|||
|
str = str + JsonStr.Left(len) + "\\\"";
|
|||
|
}
|
|||
|
JsonStr.Delete(0, len + 1);
|
|||
|
len = JsonStr.Find("\"");
|
|||
|
}
|
|||
|
str += JsonStr;
|
|||
|
value = str;
|
|||
|
}
|
|||
|
|
|||
|
void Json::operator=(CStringW JsonStr)
|
|||
|
{
|
|||
|
type = 3;
|
|||
|
valueMap.clear();
|
|||
|
if (valueVector.size() != 0)
|
|||
|
valueVector.clear();
|
|||
|
int len = JsonStr.Find(_T("\""));
|
|||
|
CStringW str;
|
|||
|
while (len != -1)
|
|||
|
{
|
|||
|
if (len == 0)
|
|||
|
{
|
|||
|
str += _T("\\\"");
|
|||
|
}
|
|||
|
else if (JsonStr.GetAt(len - 1) != _T('\\'))
|
|||
|
{
|
|||
|
str = str + JsonStr.Left(len) + _T("\\\"");
|
|||
|
}
|
|||
|
JsonStr.Delete(0, len + 1);
|
|||
|
len = JsonStr.Find(_T("\""));
|
|||
|
}
|
|||
|
str += JsonStr;
|
|||
|
value = str;
|
|||
|
}
|
|||
|
|
|||
|
void Json::operator=(Json json)
|
|||
|
{
|
|||
|
type = json.type;
|
|||
|
valueMap = json.valueMap;
|
|||
|
valueVector = json.valueVector;
|
|||
|
value = json.value;
|
|||
|
}
|
|||
|
|
|||
|
void Json::append(Json json)
|
|||
|
{
|
|||
|
type = 2;
|
|||
|
value = "";
|
|||
|
valueMap.clear();
|
|||
|
valueVector.push_back(json);
|
|||
|
}
|
|||
|
|
|||
|
void Json::clear()
|
|||
|
{
|
|||
|
type = 0;
|
|||
|
value = "";
|
|||
|
valueMap.clear();
|
|||
|
valueVector.clear();
|
|||
|
}
|
|||
|
|
|||
|
void Json::RemoveAt(CStringA Item)
|
|||
|
{
|
|||
|
if (valueMap.find((CString)Item) != valueMap.end())
|
|||
|
valueMap.erase((CString)Item);
|
|||
|
}
|
|||
|
|
|||
|
void Json::RemoveAt(CString Item)
|
|||
|
{
|
|||
|
if (valueMap.find(Item) != valueMap.end())
|
|||
|
valueMap.erase(Item);
|
|||
|
}
|
|||
|
|
|||
|
void Json::RemoveAt(INT Index)
|
|||
|
{
|
|||
|
if (valueVector.size() > Index)
|
|||
|
valueVector.erase(valueVector.begin() + Index);
|
|||
|
}
|
|||
|
|
|||
|
CStringA Json::asCStringA()
|
|||
|
{
|
|||
|
CStringA tmp;
|
|||
|
tmp = value;
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case 3:
|
|||
|
tmp.Replace("\\\"", "\"");
|
|||
|
return tmp;
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
return tmp;
|
|||
|
break;
|
|||
|
case 5:
|
|||
|
return tmp;
|
|||
|
break;
|
|||
|
case 6:
|
|||
|
return tmp;
|
|||
|
break;
|
|||
|
default:
|
|||
|
return "";
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
CString Json::asCString()
|
|||
|
{
|
|||
|
CString tmp;
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case 3:
|
|||
|
tmp = value;
|
|||
|
tmp.Replace(_T("\\\""), _T("\""));
|
|||
|
return tmp;
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
return value;
|
|||
|
break;
|
|||
|
case 5:
|
|||
|
return value;
|
|||
|
break;
|
|||
|
case 6:
|
|||
|
return value;
|
|||
|
break;
|
|||
|
default:
|
|||
|
return _T("");
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int Json::asInt()
|
|||
|
{
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case 3:
|
|||
|
return _ttoi(value);
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
return _ttoi(value);
|
|||
|
break;
|
|||
|
case 5:
|
|||
|
if (value == _T("true"))
|
|||
|
return 1;
|
|||
|
return 0;
|
|||
|
break;
|
|||
|
default:
|
|||
|
return 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
double Json::asDouble()
|
|||
|
{
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case 3:
|
|||
|
return _ttof(value);
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
return _ttof(value);
|
|||
|
break;
|
|||
|
case 5:
|
|||
|
if (value == _T("true"))
|
|||
|
return 1;
|
|||
|
return 0;
|
|||
|
break;
|
|||
|
default:
|
|||
|
return 0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAP<41>ĸ<EFBFBD><C4B8><EFBFBD>
|
|||
|
UINT Json::Size()
|
|||
|
{
|
|||
|
size_t len = 0;
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
len = valueMap.size();
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
len = valueMap.size();
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
len = valueVector.size();
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
return (UINT)len;
|
|||
|
}
|
|||
|
|
|||
|
std::map<CString, Json>::iterator Json::getBegin()
|
|||
|
{
|
|||
|
return valueMap.begin();
|
|||
|
}
|
|||
|
|
|||
|
std::map<CString, Json>::iterator Json::getEnd()
|
|||
|
{
|
|||
|
return valueMap.end();
|
|||
|
}
|
|||
|
|
|||
|
std::map<CString, Json>::iterator Json::Find(CString key)
|
|||
|
{
|
|||
|
if (type == 0 || type == 1)
|
|||
|
{
|
|||
|
return valueMap.find(key);
|
|||
|
}
|
|||
|
return valueMap.end();
|
|||
|
}
|
|||
|
|
|||
|
CStringW Json::writeCString()
|
|||
|
{
|
|||
|
CString str = _T("");
|
|||
|
if (type <= 1)
|
|||
|
{
|
|||
|
str += _T("{");
|
|||
|
if (valueMap.size() == 0)
|
|||
|
{
|
|||
|
str += _T("}");
|
|||
|
return str;
|
|||
|
}
|
|||
|
auto end = valueMap.end();
|
|||
|
end--;
|
|||
|
for (auto tmp = valueMap.begin(); tmp != valueMap.end(); tmp++)
|
|||
|
{
|
|||
|
if (tmp == end)
|
|||
|
{
|
|||
|
str += _T("\"") + tmp->first + _T("\":") + tmp->second.writeCString() + _T("}");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
str += _T("\"") + tmp->first + _T("\":") + tmp->second.writeCString() + _T(",");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (type == 2)
|
|||
|
{
|
|||
|
str += _T("[");
|
|||
|
for (int i = 0; i < valueVector.size(); i++)
|
|||
|
{
|
|||
|
if (i == valueVector.size() - 1)
|
|||
|
{
|
|||
|
str += valueVector[i].writeCString() + _T("]");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
str += valueVector[i].writeCString() + _T(",");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (type == 3)
|
|||
|
{
|
|||
|
str = _T("\"") + value + _T("\"");
|
|||
|
}
|
|||
|
else if (type == 4)
|
|||
|
{
|
|||
|
str = value;
|
|||
|
}
|
|||
|
else if (type == 5)
|
|||
|
{
|
|||
|
str = value;
|
|||
|
}
|
|||
|
else if (type == 6)
|
|||
|
{
|
|||
|
str = value;
|
|||
|
}
|
|||
|
return str;
|
|||
|
}
|
|||
|
|
|||
|
CStringA Json::write()
|
|||
|
{
|
|||
|
CStringA str;
|
|||
|
str = writeCString();
|
|||
|
return str;
|
|||
|
}
|
|||
|
|