Skip to content

引擎支持对Json文件或Json格式字符串的解析;

NJsonParser

  • 静态接口
接口参数描述
static NJsonValue ParseFile(const char* filename);filename:Json文件路径解析Json文件
static NJsonValue ParseText(const char* src);src:Json格式字符串解析Json格式的字符串
static std::string ToJson(NJsonValue*);转为Json合适的字符串
static int GetErrorCode();获取错误码
static void EndParse();结束解析,当文件解析结束后调用该接口,防止内存泄漏
static void StartParse();开始解析

NJsonValue

  • 接口
接口描述
void SetValue(NJsonValue& val);
void SetValue(NJsonValue&& val);
设置值
virtual bool IsValid()const;是否有效
virtual bool IsBool()const;是否为bool值
virtual bool IsNumber()const;是否为值类型
virtual bool IsArray()const;是否为数组类型
virtual bool IsString()const;是否为字符串类型
virtual bool IsObject()const;是否为object类型
virtual bool IsNull() const;是否为空值
NJsonArray GetJsonArray() const;获取Json数组数据
NJsonObject GetJsonObject() const;获取JsonObject数据
NJsonNumber GetJsonNumber() const;获取Json值数据
bool GetBool() const;获取bool数据
bool IsTrue() const;是否为true值
bool IsFalse() const;是否为false值
void SetBool(bool b);设置bool值
std::string GetString() const;获取字符串值
void SetString(NJsonValue value);
void SetString(const char*, unsigned length);
void SetString(const char*);
设置字符串值

NJsonObject

  • 接口
参数说明
bool IsValid()const;是否有效
virtual bool IsBool()const;是否为bool类型
virtual bool IsNumber()const;是否为数组类型
virtual bool IsArray()const;是否为字符串类型
virtual bool IsString()const;是否为Json Objetc类型
virtual bool IsObject()const;是否为空值
virtual bool IsNull() const;获取成员数量
unsigned GetMemberCount() const;获取成员容量
unsigned GetMemberCapacity() const;是否为空对象
bool IsObjectEmpty() const;是否包含指定成员
bool HasMember(const std::string& name) const;添加指定成员
NJsonObject& AddMember(NJsonValue name, NJsonValue value);移除指定成员
void RemoveMember(const char* keyName);修改指定成员的值

NJsonArray

  • 接口
参数说明
bool IsValid()const override;是否有效
virtual bool IsBool()const;是否为bool类型
virtual bool IsNumber()const;是否为值类型
virtual bool IsArray()const;是否为数组类型
virtual bool IsString()const;是否为字符串类型
virtual bool IsObject()const;是否为Object类型
virtual bool IsNull() const;是否为空值
bool Empty()const;检查数组对象是否为空
void Clear();清空数组内的元素
unsigned Capacity()const;获取数组的容量
unsigned Size() const;获取数组内元素的数量
NJsonArray& Reserve(unsigned newCapacity);重新申请数组的容量
NJsonArray& PushBack(NJsonValue val);在数组尾部添加新元素
NJsonArray& PopBack();在数组首部添加新元素

NJsonNumber

  • 接口
接口返回值说明
IsValidbool是否有效
IsBoolbool是否为bool
IsNumberbool是否为值类型
IsArraybool是否为数组类型
IsStringbool是否为字符串类型
IsObjectbool是否为Object类型
IsNullbool是否为空值
IsDoublebool是否为double类型
IsFloatbool是否为float类型
IsIntbool是否为int类型
IsUintbool是否为uint类型
IsUint64bool是否为uint64类型
IsInt64bool是否为int64类型
IsLosslessDoublebool是否为无损double
IsLosslessFloatbool是否为无损float
SetIntNJsonNumber&设置int值
SetUintNJsonNumber&设置uint值
SetInt64NJsonNumber&设置int64值
SetUInt64NJsonNumber&设置uint64值
SetDoubleNJsonNumber&设置double值
SetFloatNJsonNumber&设置float值
GetIntint获取int值
GetUintunsigned获取uint值
GetInt64long long获取int64值
GetUInt64Unsigned long long获取uint64值
GetDoubledouble获取double值
GetFloatfloat获取float值

描述:可判断NJsonNumber内部的值类型,获取或设置对应的数据

示例代码:

示例json文件内容

cpp
"Faces": 
[
	{
		"Name": "Sample1",
		"Layer": 50
	},
	{
		"Name": "Sample2",
		"Layer": 100
	}
],
"Default": 1,
"TexMode":{
"Tips":"JsonTest"
}
  • 示例解析代码
cpp
void ParseJsonSample()
{
    auto jsonValue = NJsonParser::ParseFile(NApplication::ToAbsoluteAssetsPath("Assets/JsonSample.json").c_str());
    if (jsonValue.IsValid())
    {
        NJsonObject obj = jsonValue.GetJsonObject();
        NJsonValue objValue = obj["Faces"];
        if (objValue.IsArray())
        {
            NJsonArray curArray = objValue.GetJsonArray();
            int arraySize = curArray.Size();
            for (int i = 0; i < arraySize; ++i)
            {
                NJsonObject curObj = curArray[i].GetJsonObject();
                std::string name = curObj["Name"].GetString();
                int layer = curObj["Layer"].GetJsonNumber().GetInt();
            }
        }
        objValue = obj["Default"];
        int defaultVal = objValue.GetJsonNumber().GetInt();
        objValue = obj["TexMode"];
        if (objValue.IsObject())
        {
            std::string tip = objValue.GetJsonObject()["Tips"].GetString();
        }
    }
    NJsonParser::EndParse();
}