|
新增高效率JSON命令扩展新NPC命令写法: 添加NPC命令JSON,操作JSON的字符串,格式:JSON 标识|存活时间 子命令 名称 数值
!可以使用VSCode(安装json扩展插件,json格式化插件)查看编辑json文件。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各个参数意义:
1) 标识,类似自由变量,指定一个唯一标识,“|”号后面是此对象的存活时间(秒),-1表示永久,
不写存活时间默认是180秒,即180秒后,此标识的JSON对象会被释放。
2) 子命令,有以下几种:
InitJsonFromFile 文件名 //从Json文件初始化
SaveToJsonFile 文件名 //保存到Json文件
InitJson Json字符串 //从给定的Json字符串初始化
InitFrom 其他标识.路径 //从其他标识.路径下的Json初始化,相当于复制,“.路径”可选
InitArrayFromCsv Csv字符串 //从给定的Json数字字符串初始化为Json数组
InitArrayFromCsvFile 文件名 //从给定的Csv文件初始化为Json数组
ToCsv S变量 //保存Csv字符串到S变量中,只能是数组对象才能保存为Csv字符串
SaveToCsvFile 文件名 //保存到Csv文件,只能是数组对象才能保存为Csv文件
SortByName //按名称排序
SortByValue //按数值排序
Clear //清理
DeleteByName 名称 //按名称删除
DeleteByPath 路径 //按路径删除
AddValue 名称 数值 //添加数值,数值可以是普通的字符串、整数、浮点数等,或者是一个标准的Json对象或数字(字符串形式)
AddOrUpdateValue 名称 数值 //添加或更新数值(存在则更新,否则添加),其他同上
SetValueByPath 路径 数值 //按路径设置数值(不存在则创建,否则更新)
AddOrUpdateObject 源标识 0/1 //从其源标识添加或更新到目标标识(参数2)的Json中,0只添加目标标识不存在的项,1目标标识里存在则会更新该项
GetCountByPath M变量 路径 //获取节点数量,当路径为空时,获取标识下的json的基层节点数到M变量,否则获取路径下对象或数组的节点数到M变量
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"}
注意:数值最好不要有空格,如果必须带空格,请使用双引号""包围起来以表示为1个参数
5) JSON专用变量:
<$JSON(标识.路径)J> //可读性差的单行JSON字符串,“.路径”为可选项,下同
<$JSON(标识.路径)H> //格式化后的可读性高的多行JSON字符串
<$JSON(标识.路径)C> //获取路径下对象或数组的数量
<$JSON(标识.路径)T.路径> //获取类型,0未定义,1对象,2数组
<$JSON(标识.路径)N.索引> //根据索引位置获取名称,索引依据上面获取的数量循环读取即可,索引是数字
<$JSON(标识.路径)V.名称或索引> // 根据索引位置或节点名称取值,有2种方法:1根据索引位置取值;2省略索引,直接用路径取值
例:
#act
JSON myjson Clear
JSON myjson AddValue 整数 12345
JSON myjson AddValue 字符串 这是字符串...
JSON myjson AddValue 布尔值 True
JSON myjson AddValue 浮点数 2.532
JSON myjson SetValueByPath 日期 "2018-11-12 06:12:11"
JSON myjson SetValueByPath 数组 ["字符串",100,null,true,false,123.4]
JSON myjson SetValueByPath 对象 {"name":"Object_Name","value":"Object_Value"}
sendmsg 7 Json:<$JSON(myjson)H>
; 第一个位置以0开始,<$JSON(myjson.数组.1)V>等同于<$JSON(myjson.数组)V.1>
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>
; 保存到文件
JSON myjson SaveToJsonFile ..\JsonData\example.json
; 从字符串解释到JSON
JSON myjson InitJson {"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)V>
JSON myjson DeleteByPath array.3
JSON myjson DeleteByPath myobj.subobj.1
JSON myjson DeleteByPath myobj.subobj.int2
sendmsg 7 删除后的结果<$JSON(myjson)J>
; 合并例子
JSON dst InitJson {a:10000,b:200,c:"id"}
JSON src InitJson {a:"str",d:500,e:7002}
; 只添加不存在的项目
JSON tmp InitFrom dst
JSON tmp AddOrUpdateObject src 0
sendmsg 7 合并结果0:<$JSON(tmp)JSON>
; 不重复,重复项目将以“源标识”为准
JSON tmp InitFrom dst
JSON tmp AddOrUpdateObject src 1
sendmsg 7 合并结果1:<$JSON(tmp)JSON>
; 赋值
JSON myjson SetValueByPath object.赋值.int 87654321
JSON myjson SetValueByPath object.赋值.float 5.76
JSON myjson SetValueByPath object.赋值.string abcdefg...
JSON myjson SetValueByPath object.赋值.datetime "2022-11-22 11:22:33.123"
JSON myjson SetValueByPath object.赋值.子对象.int 12345678
JSON myjson SetValueByPath object.赋值.子对象.ishum true
JSON myjson SetValueByPath object.赋值.子对象.float 5.76
JSON myjson SetValueByPath object.赋值.子对象.array [12345,1.76,false,string,2022-11-22T11:22:33.123]
sendmsg 7 赋值结果<$JSON(myjson)J>
; 其他测试例子
JSON myjson Clear
JSON myjson SetValueByPath 数组 ["字符串",100,null,true,123.4]
JSON myjson SetValueByPath 对象 {"name":"Object_Name","value":"Object_Value"}
sendmsg 7 重设结果:<$JSON(myjson)J>
; 根据索引循环取数组的值
Mov D98 <$JSON(myjson.数组)C>
sendmsg 7 类型值:<$JSON(myjson.数组)T>,数量:<$STR(D98)>
#for (D99 = 0, D99 < D98, D99 + 1)
#if
#act
sendmsg 7 “数组[<$STR(D99)>]”的值:<$JSON(myjson.数组)V.<$STR(D99)>>
#~for
; 根据索引循环取对象里的值
Mov D98 <$JSON(myjson.对象)C>
sendmsg 7 类型值:<$JSON(myjson.对象)T>,数量:<$STR(D98)>
#for (D99 = 0, D99 < D98, D99 + 1)
#if
#act
; 根据索引取得名称
Mov S99 <$JSON(myjson.对象)N.<$STR(D99)>>
; 再根据名称取值
sendmsg 7 “对象”<$STR(S99)>的值是:<$JSON(myjson.对象)V.<$STR(S99)>>
#~for
; 另一种写法
; 将“myjson.对象”初始化到tmp中
JSON tmp InitFrom myjson.对象 // 等同于 JSON tmp InitJson <$JSON(myjson.对象)V>
Mov D98 <$JSON(tmp)C>
sendmsg 7 类型值:<$JSON(tmp)T>,数量:<$STR(D98)>
#for (D99 = 0, D99 < D98, D99 + 1)
#if
#act
; 取节点称
Mov S99 <$JSON(tmp)N.<$STR(D99)>>
; 不同于上面的索引位置取值,这里使用的是路径取值的方法
sendmsg 7 “对象”的值是:<$JSON(tmp.<$STR(S99)>)V>
#~for
添加NPC检测命令CheckJson,格式:CheckJson 标识 子命令 标识/名称/路径 选项
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各个参数意义:
1) 标识,类似自由变量,指定一个唯一标识
2) 方法,有以下几种:
X 判断是否包含指定路径的子结点 //用法:CheckJson myjson X path
N 判断当前层是否有指定的名称 //用法:CheckJson myjson N name
V 判断当前层是否有指定的数值 //用法:CheckJson myjson V value
E 判断JSON内容是否相同 //用法: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
#act
sendmsg 6 路径存在,数组[0]:<$JSON(myjson1)array.0>,数组[3]整个对象:<$JSON(myjson1)array.3>,数组[3](是一个对象)“str”的值:<$JSON(myjson1)array.3.str>
#elseact
sendmsg 5 路径不存在
#if
CheckJson myjson1 N name2
#act
sendmsg 6 1)包含名称
#elseact
sendmsg 5 1)不包含名称
#if
CheckJson myjson1 V 123456
#act
sendmsg 6 3)包含数值
#elseact
sendmsg 5 3)不包含数值
#if
CheckJson myjson1 E myjson2
#act
sendmsg 6 5)相等
#elseact
sendmsg 5 5)不等
[@检测]
#ACT
;JSON 标识:myjson3 获取命令 InitJson “对象”:{"myobj":{"name":"狂战","subobj":{"name1":"www.bluem2.com","name2":"狂魔","int2":123456},"array":[1,3,4]}, 组:"array":[1.23,200,300,{"str":"字符串"}]}
;JSON myjson3 InitJson {"myobj":{"name":"狂战","subobj":{"name1":"www.bluem2.com","name2":"狂魔","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"str":"字符串"}]}
#if
CompVal <$JSON(myjson3.myobj.name)V> = <$USERNAME>
#ACT
sendmsg 5 OK
BREAK
#ELSEACT
SendMsg 5 no
BREAK
#if
; 检测第一层,名为array的数组的第四个对象是否存在 格式化:<$JSON(标识.路径)H> 能查看组 对象 CheckJson 换成 CompVal 标识 = 目标
CheckJson myjson3 X array
#act
sendmsg 5 “对象”:<$JSON(myjson3.myobj)T> //组
sendmsg 5 “数组”:<$JSON(myjson3.array)T>
sendmsg 7 格式化:<$JSON(myjson3)H>
sendmsg 7 “subobj”:<$JSON(myjson3.myobj.subobj.name1)V>
sendmsg 7 “subobj”:<$JSON(myjson3.myobj.subobj.name2)V>
sendmsg 7 “subobj”:<$JSON(myjson3.myobj.subobj.int2)V>
sendmsg 5 “array”:<$JSON(myjson3.myobj.array)V>
sendmsg 7 “array”:<$JSON(myjson3.array.0)V>
sendmsg 7 “array”:<$JSON(myjson3.array.1)V>
sendmsg 7 “array”:<$JSON(myjson3.array.2)V>
sendmsg 7 “str”:<$JSON(myjson3.array.3.str)V>
sendmsg 6 路径存在,数组[0]:<$JSON(myjson3)array.0)V>数组[3]整个对象:<$JSON(myjson3)array.2)V>、数组[3](是一个对象)“str”的值:<$JSON(myjson3)array.3.str)V>
#elseact
sendmsg 5 路径不存在
[@按名称排序]
#ACT
;JSON 富豪榜 Clear
JSON 富豪榜 AddValue <$USERNAME> <$GAMEGOLD>
JSON 富豪榜 InitJson <$JSON(富豪榜)JSON>
sendmsg 6 数组:<$JSON(富豪榜.数组)J>
JSON 富豪榜 SortByName
sendmsg 5 数值正序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SortByName 1
sendmsg 7 数值反序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SaveToJsonFile ..\JsonData\富豪榜.json
GOTO @main
[@按数值排序]
#ACT
;JSON 富豪榜 Clear
JSON 富豪榜 AddValue <$USERNAME> <$GAMEGOLD>
JSON 富豪榜 InitJson <$JSON(富豪榜)JSON>
sendmsg 6 数组:<$JSON(富豪榜.数组)J>
JSON 富豪榜 SortByValue
sendmsg 5 数值正序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SortByValue 1
sendmsg 7 数值反序结果:<$JSON(富豪榜)J>
JSON 富豪榜 SaveToJsonFile ..\JsonData\富豪榜.json
GOTO @main
[@InitArrayFromCsv] ;从给定的Csv字符串初始化
#ACT
JSON 富豪榜 InitArrayFromCsv 富豪榜."玩家"
sendmsg 5 结果:<$JSON(富豪榜.玩家)J>
GOTO @main
[@AddValue]
#act
JSON myjson Clear
JSON myjson AddValue 整数 12345
JSON myjson AddValue 字符串 这是字符串...
JSON myjson AddValue 布尔值 True
JSON myjson AddValue 浮点数 2.532
JSON myjson SaveToJsonFile ..\JsonData\example.json
JSON myjson InitJson <$JSON(myjson)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson)JSON>
[@赋值组]
#act
JSON myjson1 AddOrUpdateValue 数组 [<$GAMEGOLD>]
JSON myjson1 AddOrUpdateValue 对象 {<$USERNAME>}
JSON myjson1 SaveToJsonFile ..\JsonData\example1.json
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson1)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson1)JSON>
; 组第一个位置以0开始,<$JSON(myjson.数组.1)V>等同于<$JSON(myjson.数组)V.1>
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>
[@赋值组1]
#act
JSON myjson1 SetValueByPath 数组 ["字符串",100,null,true,false,123.4]
JSON myjson1 SetValueByPath 对象 {"name":"张三","name":"李四"}
JSON myjson1 SaveToJsonFile ..\JsonData\example1.json
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson1)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson1)JSON>
; 组第一个位置以0开始,<$JSON(myjson.数组.1)V>等同于<$JSON(myjson.数组)V.1>
sendmsg 7 “数组”第2位置的值是:<$JSON(myjson.数组.1)V>
[@AddOrUpdateValue]
#act
JSON myjson1 AddOrUpdateValue 日期 "2024-10-01 00:00:00"
JSON myjson1 AddOrUpdateValue 数组 ["字符串",1000]
JSON myjson1 AddOrUpdateValue 对象 {"name":"BLUEM2","name":"引擎"}
JSON myjson1 SaveToJsonFile ..\JsonData\example1.json
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 7 格式化多行JSON字符串:<$JSON(myjson1)H>
sendmsg 7 格式化单行JSON字符串:<$JSON(myjson1)JSON>
[@AddOrUpdateObject]
#act
JSON myjson1 AddOrUpdateObject "2028-10-01 00:00:00" 1
JSON myjson1 AddOrUpdateObject 数组 ["字符串",10000]
JSON myjson1 AddOrUpdateObject 对象 {"name":"引擎","name":"BLUEM2"}
JSON myjson1 InitJson <$JSON(myjson1)JSON>
sendmsg 5 Json:<$JSON(myjson1)H>
sendmsg 5 Json:<$JSON(myjson1)JSON>
[@DeleteByPath]
#act
JSON myjson InitJson {"myobj":{"name":"张三","subobj":{"name1":"李四","name2":"老六","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"name":"字符串"}]}
sendmsg 5 取值:<$JSON(myjson)H>
JSON myjson DeleteByPath myobj.name
JSON myjson DeleteByPath myobj.subobj.name1
JSON myjson DeleteByPath myobj.subobj.int2
sendmsg 7 删除:<$JSON(myjson)J>
[@DeleteByName]
#act
JSON myjson InitJson {"myobj":{"name":"张三","subobj":{"name1":"李四","name2":"老六","int2":123456},"array":[1,3,4]},"array":[1.23,200,300,{"name":"BLUEM2引擎"}]}
sendmsg 5 取值:<$JSON(myjson)H>
JSON myjson DeleteByName myobj //按名称删除将父:myobj 子:name 子:subobj、array}, 内容删除!
sendmsg 7 删除:<$JSON(myjson)J>
[@JsonArray1]
#act
; 例1
JSON myjson InitArrayFromCsv 1,8,3,4,5
sendmsg 7 InitArrayFromCsv:<$JSON(myjson)J>
JSON myjson GetCountByPath M99
sendmsg 7 数组数量:<$STR(M99)>(等同于:<$JSON(myjson)C>)
JSON myjson ToCsv S_Temp
sendmsg 7 ToCsv:<$STR(S_Temp)>
JSON myjson SaveToCsvFile ..\JsonData\array1.csv
[@JsonArray2]
; 例2
JSON myjson InitJson {"玩家":[<$USERNAME>,<$GAMEGOLD>,]}
sendmsg 7 InitJson:<$JSON(myjson)J>
JSON myjson GetCountByPath M99 数组
sendmsg 7 数组数量:<$STR(M99)>(等同于:<$JSON(myjson.数组)C>)
#for (D99 = 0, D99 < M99, D99 + 1)
#if
#act
sendmsg 7 序号:<$STR(D99)>,数值:<$JSON(myjson.数组)V.<$STR(D99)>>
#~for
#if
#act
; 将“myjson.数组”复制到“临时数组”
JSON 临时数组 InitFrom myjson.数组
JSON 临时数组 SortByValue 1
sendmsg 7 临时数组类型<$JSON(临时数组)T>,结果:<$JSON(临时数组)J>
JSON 临时数组 ToCsv S_Temp
sendmsg 7 ToCsv2:<$STR(S_Temp)>
; SaveToCsvFile需要对象是数组
JSON 临时数组 SaveToCsvFile ..\JsonData\array2.csv
; 从csv文件加载,注意csv第一行是字段/列的名称
JSON J_CsvData InitArrayFromCsvFile ..\JsonData\array3.csv
sendmsg 7 InitArrayFromCsvFile:<$JSON(J_CsvData)J>
; 行数
Mov M99 <$JSON(J_CsvData)C>
#for (D99 = 0, D99 < M99, D99 + 1)
#if
#act
sendmsg 5 行<$STR(D99)>数据:<$JSON(J_CsvData)V.<$STR(D99)>>
JSON J_Temp InitJson <$JSON(J_CsvData)V.<$STR(D99)>>
sendmsg 7 行<$STR(D99)>类型:<$JSON(J_Temp)T>,数量:<$JSON(J_Temp)C>
Mov M98 <$JSON(J_Temp)C>
#for (D98 = 0, D98 < M98, D98 + 1)
#if
#act
sendmsg 7 字段名:<$JSON(J_Temp)N.<$STR(D98)>>,数值:<$JSON(J_Temp)V.<$STR(D98)>>
#~for
#~for
[@InitJson]
#act
JSON myjson InitJson <$JSON(myjson)JSON>
JSON myjson1 InitJson <$JSON(myjson1)JSON>
#SAY
格式化:<$JSON(myjson)JSON> <返回/@main> <关闭/@exit>\
整数:<$JSON(myjson.整数)V>\
字符:<$JSON(myjson.字符串)V>\
布尔:<$JSON(myjson.布尔值)V>\
浮点:<$JSON(myjson.浮点数)V>\
日期:<$JSON(myjson1.日期)V>\
数组:<$JSON(myjson1.数组.0)V>\
数组:<$JSON(myjson1.数组)V.1>\
格式化:<$JSON(myjson1.对象)V>\
对像:<$JSON(myjson1.对象)V.0>\
对像:<$JSON(myjson1.对象)V.1>\
<关闭/@exit>
[@InitFrom]
#act
JSON myjson InitFrom <$JSON(myjson)JSON>
JSON myjson1 InitFrom <$JSON(myjson1)JSON>
#SAY
格式化:<$JSON(myjson)JSON> <返回/@main> <关闭/@exit>\
整数:<$JSON(myjson.整数)V>\
字符:<$JSON(myjson.字符串)V>\
布尔:<$JSON(myjson.布尔值)V>\
浮点:<$JSON(myjson.浮点数)V>\
日期:<$JSON(myjson1.日期)V>\
数组:<$JSON(myjson1.数组.0)V>\
数组:<$JSON(myjson1.数组)V.1>\
格式化:<$JSON(myjson1.对象)V>\
对像:<$JSON(myjson1.对象)V.0>\
对像:<$JSON(myjson1.对象)V.1>\
<关闭/@exit>
[@DeleteByPat]
JSON myjson DeleteByPath array.3
JSON myjson DeleteByPath myobj.subobj.1
JSON myjson DeleteByPath myobj.subobj.int2
sendmsg 7 删除后的结果<$JSON(myjson)J>
|
|