引擎支持对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
- 接口
| 接口 | 返回值 | 说明 |
|---|---|---|
| IsValid | bool | 是否有效 |
| IsBool | bool | 是否为bool |
| IsNumber | bool | 是否为值类型 |
| IsArray | bool | 是否为数组类型 |
| IsString | bool | 是否为字符串类型 |
| IsObject | bool | 是否为Object类型 |
| IsNull | bool | 是否为空值 |
| IsDouble | bool | 是否为double类型 |
| IsFloat | bool | 是否为float类型 |
| IsInt | bool | 是否为int类型 |
| IsUint | bool | 是否为uint类型 |
| IsUint64 | bool | 是否为uint64类型 |
| IsInt64 | bool | 是否为int64类型 |
| IsLosslessDouble | bool | 是否为无损double |
| IsLosslessFloat | bool | 是否为无损float |
| SetInt | NJsonNumber& | 设置int值 |
| SetUint | NJsonNumber& | 设置uint值 |
| SetInt64 | NJsonNumber& | 设置int64值 |
| SetUInt64 | NJsonNumber& | 设置uint64值 |
| SetDouble | NJsonNumber& | 设置double值 |
| SetFloat | NJsonNumber& | 设置float值 |
| GetInt | int | 获取int值 |
| GetUint | unsigned | 获取uint值 |
| GetInt64 | long long | 获取int64值 |
| GetUInt64 | Unsigned long long | 获取uint64值 |
| GetDouble | double | 获取double值 |
| GetFloat | float | 获取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();
}
