Blue引擎新增高效率JSON命令,扩展新NPC命令写法,提高更改读写效率! 可以使用VSCode(安装json扩展插件,json格式化插件)查看编辑json文件。 资料参考:https://www.runoob.com/json/json-tutorial.html 各个参数意义: 1) 标识,类似自由变量,指定一个唯一标识,“|”号后面是此对象的存活时间(秒),-1表示永久, 不写存活时间默认是180秒,即180秒后,此标识的JSON对象会被释放。 2) 方法,有以下几种: L 从文件加载,不要频繁使用,否则有性能问题!!! S 保存到文件,不要频繁使用,否则有性能问题!!! A 添加 E 赋值 C 清理 D 删除指定名称的子结点 P 解析给定的字符串 O 排序,格式: 1) JSON 标识 O 是否按名称排序(0/1) 是否排序子结点(0/1) Y 复制,格式: 1) JSON 标识 Y 源标识 0 // 从“源标识”复制一份到“标识” M 合并,格式: 1) JSON 目标标识 M 源标识 0 // 0 不重复,重复项目将以“目标标识”为准,默认 2) JSON 目标标识 M 源标识 1 // 1 不重复,重复项目将以“源标识”为准 3) JSON 目标标识 M 源标识 2 // 2 可重复,将“源标识”项目追加至“标识”中 3) 名称,类型是字符串 4) 数值,有以下几种类型: 整数 12345678 字符串 普通字符串 布尔值 True|False 浮点数 1.367 日期时间 "2018-11-12 06:12:11" 或 "2018-11-12T06:12:11.123",“.”后面指的是毫秒 数组 ["string",100,null,true,false,123.4] 子对象 {"name":"ObjectName","value":"ObjectValue"} 注意:数值最好不要有空格,如果必须带空格,请使用双引号""包围起来以表示为一个参数 5) 取值的变量: <$JSON(标识)JSON> // 固定格式,JSON对象的字符串,单行 <$JSON(标识)FORMAT> // 固定格式,JSON对象格式化后的字符串(换行) <$JSON(标识)path> // 某路径或名称下的数值 例: #act JSON myjson C JSON myjson A 整数 12345 JSON myjson A 字符串 这是字符串... JSON myjson A 布尔值 True JSON myjson A 浮点数 2.532 JSON myjson E 日期时间 "2018-11-12 06:12:11" JSON myjson E 数组 ["字符串",100,null,true,false,123.4] JSON myjson E 对象 {"name":"Object_Name","value":"Object_Value"} sendmsg 7 myjson格式化字符串是:<$JSON(myjson)FORMAT> ; 第一个位置以0开始 sendmsg 7 “数组”第二位置的值是:<$JSON(myjson)数组[1]> ; 保存到文件 JSON myjson S ..\QuestDiary\example.json ; 从字符串解释到JSON JSON myjson P {"myobj":{"name":"object1","subobj":{"name2":"subObj2","name1":"subObj1","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"name":"字符串"}]} sendmsg 7 取值:<$JSON(myjson)object.subobj.int2> JSON myjson D array[3] JSON myjson D myobj.subobj[1] JSON myjson D myobj.subobj.int2 sendmsg 7 删除后的结果<$JSON(myjson)FORMAT> ; 合并例子 JSON myjson1 P {a:10000,b:200,c:"id"} JSON myjson2 P {a:"str",d:500,e:7002} ; 不重复,重复项目将以“目标标识”为准,默认 JSON cpyjson Y myjson1 JSON cpyjson M myjson2 0 sendmsg 7 合并结果0:<$JSON(cpyjson)JSON> ; 不重复,重复项目将以“源标识”为准 JSON cpyjson Y myjson1 JSON cpyjson M myjson2 1 sendmsg 7 合并结果1:<$JSON(cpyjson)JSON> ; 追加项目,允许重复 JSON cpyjson Y myjson1 JSON cpyjson M myjson2 2 sendmsg 7 合并结果2:<$JSON(cpyjson)JSON> ; 赋值 JSON myjson E object.赋值.int 87654321 JSON myjson E object.赋值.float 5.76 JSON myjson E object.赋值.string abcdefg... JSON myjson E object.赋值.datetime "2022-11-22 11:22:33.123" JSON myjson E object.赋值.子对象.int 12345678 JSON myjson E object.赋值.子对象.ishum true JSON myjson E object.赋值.子对象.float 5.76 JSON myjson E object.赋值.子对象.array [12345,1.76,false,string,2022-11-22T11:22:33.123] sendmsg 7 赋值结果<$JSON(myjson)FORMAT> 添加NPC检测命令CheckJson,格式:CheckJson 标识 方法 标识|名称|路径 选项 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 各个参数意义: 1) 标识,类似自由变量,指定一个唯一标识 2) 方法,有以下几种: X 判断是否包含指定路径的子结点,格式: 1) CheckJson myjson X path N 判断是否包含指定的子结点名称,格式: 1) CheckJson myjson N name 是否嵌套检查子结点(0/1) V 判断是否包含指定的子结点数值,格式: 1) CheckJson myjson N value 是否嵌套检查子结点(0/1) E 判断JSON内容是否相同,格式: 1) CheckJson myjson E myjson2 例: #if true #act JSON myjson1 P {"myobj":{"name":"object1","subobj":{"name2":"subObj2","name1":"subObj1","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"str":"字符串"}]} JSON myjson2 P {"myobj":{"name":"object1","subobj":{"name2":"subObj2","name1":"subObj1","int2":888888},"array":[1,3,4]},"array":[1.23,200,300,{"str":"字符串"}]} #if CheckJson myjson1 X myobj.subobj.int2 #act sendmsg 6 路径存在:<$JSON(myjson1)myobj.subobj.int2> #elseact sendmsg 5 路径不存在 #if ; 检测第一层,名为array的数组的第四个对象是否存在 CheckJson myjson1 X array[3] #act sendmsg 6 路径存在,取数值方法一:<$JSON(myjson1)array[3][0]>,方法二:<$JSON(myjson1)array[3].str>,方法三(整个对象):<$JSON(myjson1)array[3]> #elseact sendmsg 5 路径不存在 #if CheckJson myjson1 N name2 #act sendmsg 6 1)包含名称 #elseact sendmsg 5 1)不包含名称 #if CheckJson myjson1 N name2 1 #act sendmsg 6 2)包含名称(检查子结点),数值是:<$JSON(myjson1)myobj.subobj.name2> #elseact sendmsg 5 2)不包含名称(检查子结点) #if CheckJson myjson1 V 123456 #act sendmsg 6 3)包含数值 #elseact sendmsg 5 3)不包含数值 #if CheckJson myjson2 V 1.23 1 #act sendmsg 6 4)包含数值(检查子结点):<$JSON(myjson1)array[0]> #elseact sendmsg 5 4)不包含数值(检查子结点) #if CheckJson myjson1 E myjson2 #act sendmsg 6 5)相等 #elseact sendmsg 5 5)不等 |