IT民工——發一個萬能的JSON解析器吧!
阿新 • • 發佈:2019-01-24
using System;
using System.Collections.Generic;
using System.Text;
namespace Pixysoft.Json
{
publicclass CommonJsonModel : CommonJsonModelAnalyzer
{
privatestring rawjson;
privatebool isValue =false;
privatebool isModel =false;
privatebool isCollection =false;
internal
{
this.rawjson = rawjson;
if (string.IsNullOrEmpty(rawjson))
thrownew Exception("missing rawjson");
rawjson = rawjson.Trim();
if (rawjson.StartsWith("{"))
{
isModel =true;
}
{
isCollection =true;
}
else
{
isValue =true;
}
}
publicstring Rawjson
{
get { return rawjson; }
}
publicbool IsValue()
{
}
publicbool IsValue(string key)
{
if (!isModel)
returnfalse;
if (string.IsNullOrEmpty(key))
returnfalse;
foreach (string subjson inbase._GetCollection(this.rawjson))
{
CommonJsonModel model =new CommonJsonModel(subjson);
if (!model.IsValue())
continue;
if (model.Key == key)
{
CommonJsonModel submodel =new CommonJsonModel(model.Value);
return submodel.IsValue();
}
}
returnfalse;
}
publicbool IsModel()
{
return isModel;
}
publicbool IsModel(string key)
{
if (!isModel)
returnfalse;
if (string.IsNullOrEmpty(key))
returnfalse;
foreach (string subjson inbase._GetCollection(this.rawjson))
{
CommonJsonModel model =new CommonJsonModel(subjson);
if (!model.IsValue())
continue;
if (model.Key == key)
{
CommonJsonModel submodel =new CommonJsonModel(model.Value);
return submodel.IsModel();
}
}
returnfalse;
}
publicbool IsCollection()
{
return isCollection;
}
publicbool IsCollection(string key)
{
if (!isModel)
returnfalse;
if (string.IsNullOrEmpty(key))
returnfalse;
foreach (string subjson inbase._GetCollection(this.rawjson))
{
CommonJsonModel model =new CommonJsonModel(subjson);
if (!model.IsValue())
continue;
if (model.Key == key)
{
CommonJsonModel submodel =new CommonJsonModel(model.Value);
return submodel.IsCollection();
}
}
returnfalse;
}
///<summary>/// 當模型是物件,返回擁有的key
///</summary>///<returns></returns>public List<string> GetKeys()
{
if (!isModel)
returnnull;
List<string> list =new List<string>();
foreach (string subjson inbase._GetCollection(this.rawjson))
{
string key =new CommonJsonModel(subjson).Key;
if (!string.IsNullOrEmpty(key))
list.Add(key);
}
return list;
}
///<summary>/// 當模型是物件,key對應是值,則返回key對應的值
///</summary>///<param name="key"></param>///<returns></returns>publicstring GetValue(string key)
{
if (!isModel)
returnnull;
if (string.IsNullOrEmpty(key))
returnnull;
foreach (string subjson inbase._GetCollection(this.rawjson))
{
CommonJsonModel model =new CommonJsonModel(subjson);
if (!model.IsValue())
continue;
if (model.Key == key)
return model.Value;
}
returnnull;
}
///<summary>/// 模型是物件,key對應是物件,返回key對應的物件
///</summary>///<param name="key"></param>///<returns></returns>public CommonJsonModel GetModel(string key)
{
if (!isModel)
returnnull;
if (string.IsNullOrEmpty(key))
returnnull;
foreach (string subjson inbase._GetCollection(this.rawjson))
{
CommonJsonModel model =new CommonJsonModel(subjson);
if (!model.IsValue())
continue;
if (model.Key == key)
{
CommonJsonModel submodel =new CommonJsonModel(model.Value);
if (!submodel.IsModel())
returnnull;
elsereturn submodel;
}
}
returnnull;
}
///<summary>/// 模型是物件,key對應是集合,返回集合
///</summary>///<param name="key"></param>///<returns></returns>public CommonJsonModel GetCollection(string key)
{
if (!isModel)
returnnull;
if (string.IsNullOrEmpty(key))
returnnull;
foreach (string subjson inbase._GetCollection(this.rawjson))
{
CommonJsonModel model =new CommonJsonModel(subjson);
if (!model.IsValue())
continue;
if (model.Key == key)
{
CommonJsonModel submodel =new CommonJsonModel(model.Value);
if (!submodel.IsCollection())
returnnull;
elsereturn submodel;
}
}
returnnull;
}
///<summary>/// 模型是集合,返回自身
///</summary>///<returns></returns>public List<CommonJsonModel> GetCollection()
{
List<CommonJsonModel> list =new List<CommonJsonModel>();
if (IsValue())
return list;
foreach (string subjson inbase._GetCollection(rawjson))
{
list.Add(new CommonJsonModel(subjson));
}
return list;
}
///<summary>/// 當模型是值物件,返回key
///</summary>privatestring Key
{
get
{
if (IsValue())
returnbase._GetKey(rawjson);
returnnull;
}
}
///<summary>/// 當模型是值物件,返回value
///</summary>privatestring Value
{
get
{
if (!IsValue())
returnnull;
returnbase._GetValue(rawjson);
}
}
}
}