FWScript 结构
FWScript提供一种结构存储的方式,使用了MongoDB中Bson的实现方式进行数据的存放与处理。另外也实现了BsonArray,作为使用数据源方式实现的数组的补充。
- 结构赋值
- 结构取值
- 结构修改
- 文件读写
结构赋值
采用与JavaScript类似的方式来定义一个结构,也可以使用Json的方式,FWScript将逐一进行处理,因此可以使用变量,也可以在使用"的字符串里面放置变量。
可以使用JavaScript的方式,如下所示: $b = {a3:"aaa",b3:"bbb",cdf:{c2:"cc",d3:"ddd",f4:"ffff"},thelist:["fff",23,-12,true]} 也可以直接使用Json格式,如: $b = {"a3":3.12, "b3":-12, "lll":[12,23,33]} 在所有独立理解的地方,都可以使用变量,如: $b = {$aa:$3, "b@$2":$2, $name:[$1,@12,@]} 为了方便,FWScript扩展了注释的使用,凡是在引号之外的两个斜杠之间的内容,都是注释,如: $b = {/this is a document/ $a:/the content of a/ 3.4,list:[12,/you can use hex or oct/0xFF, 056, 2.3]} // 注意:如果在文件的json或结构定义中使用了注释,则这个文件只能在BizRunner中使用,无法在第三方的系统中使用 // 如果使用标准的注释结构 /* */ 则与我们的定义是兼容的 除了Bson外,还支持BsonArray作为变量的类型,其取值方式为: $a ={["abc",{a:1,b:2}, "rrr"]} 注意不是以[开头,而是以{[开头,与使用Dlist方式实现的数组区分开。
结构取值
FWScript支持使用两种方式从结构中取值,使用取下标的方式[],与使用取属性的方式.
取下标的方式 $b[index]
此种方式与Bson标准的方法相同,同时借鉴了JavaScript的习惯,有没有引号都一样。 针对Bson,既可以使用属性名称name,也可以实行数字index 如: $b = {a3:"aaa",b3:"bbb",cdf:{c2:"cc",d3:"ddd",f4:"ffff"},thelist:["fff",23,-12,true]} $b[a3] 的值为 "aaa",也可以使用 $b["a3"], 也可以先赋值$1="a3",再使用 $b[$1] $b[edf][c2] 的值为 "cc" $b[1] 的值为 "bbb" $b[2][2] 的值为 "fff" 针对BsonArray,则只可以指定对应的序号(从0开始) 如: $b = {[11,12,{b11:"aaa",b22:"bbb"}]} $b[1]的值为12,也可以赋值$5为1,使用 $b[$5] $b[2][b22] 的值为 "bbb", 也可以为 $b[2][1]
取属性值的方式 $b.attr
此种方式与JQuery的习惯类似。 针对Bson,既可以使用属性名称name,也可以实行数字index 如: $b = {a3:"aaa",b3:"bbb",cdf:{c2:"cc",d3:"ddd",f4:"ffff"},thelist:["fff",23,-12,true]} $b.a3 的值为 "aaa",也可以先赋值$1="a3",再使用 $b.$1 $b.cdf.c2 的值为 "cc" $b.1 的值为 "bbb" $b.2.2 的值为 "fff" 针对BsonArray,则只可以指定对应的序号(从0开始) 如: $b = {[11,12,{b11:"aaa",b22:"bbb"}]} $b.1的值为12,也可以赋值$5为1,使用 $b.$5 $b.2.b22 的值为 "bbb", 也可以为 $b.2.1
结构修改
当一个Bson结构已有数据时,可以向里面添加内容,也可以删除一些内容
当向一个bson结构添加与修改项的时候,需要指定name与value;当向一个bsonarray添加项的时候,则需要指定插到第几项order以及要插入的值value。 当需要从一个bson结构删除一项的时候,只需指定其name;而当需要从一个bsonarray删除项的时候,则只需要指定第几项。
针对Bson的添加与修改操作:
Bson的增加与修改视相应的attribute是否存在,如果存在,则直接修改,如果使用者用的是增加的语法,则出警告信息;如果不存在,则直接添加,如果使用者用的是修改的语法,则也出警告信息。 增加标准方式为:$b+name=value,也可以为$b.name += value $b[name] += value 修改的标准方式为:$b.name = value, $b[name]=value 其中name可以使用数字变量$0-$9,value使用表达式 如: $b+aaa= $3+"aaa" $b+$1= 123+45 $b.$1+= "aaa" $b.aaa = "234" 也可以对bson结构的子文档进行添加与修改操作,如: $b = {a1:12, b1:{b11:"aaa",b22:"bbb"}} $b.b1+b33="ccc" 则执行后的结果为: $b = {a1:12, b1:{b11:"aaa",b22:"bbb",b33:"ccc"}} $b.b1.b11 = "ccc: 则执行后的结果为: $b = {a1:12, b1:{b11:"ccc",b22:"bbb",b33:"ccc"}}
针对BsonArray的添加与修改操作:
增加的标准方式为:$b+dd=value,也可以为$b.dd += value $b[dd] += value 修改的标准方式为:$b.dd = value, $b[dd] = value 其中dd可以使用数字变量$0-$9,value可以使用表达式 如: $b+2= $3+"aaa" $1=2 $b+$1= 123+45 $b.$1+= "aaa" $b.$1 = "ccc" 也可以对bsonArray结构的子文档进行添加操作,如: $b = {[11,12,{b11:"aaa",b22:"bbb"}]} $b.2+b33="ccc" 或 $b[2]+b33 = "ccc" 则执行后的结果为: $b = {[11,12,{b11:"aaa",b22:"bbb",b33:"ccc"}]} $b.2.b11 = "ccc" 或者 $b[2][b11] = "ccc" 则执行后的结果为: $b = {[11,12,{b11:"ccc",b22:"bbb",b33:"ccc"}]}
注意: 针对bson或bsonarray的增加与修改,其实最终是定位在最后的子文档中。如: $b = {a1: 3, a2:{aa1:"rrr", aa2:{aaa1:3, aaa3:4}, aa3:4, aa4:[1,2,3,4,5]}, a3:5} 如果前面的定位描述为: $b.a2.aa2.aaa1 则作用在一个bsondocument上面,亦即aa2上面,用于修改它的aaa1属性 如果前面的定位描述为: $b.a2.aa4.3 则作用在一个bsonArray上面,亦即aa4上面,要修改的就是它的第3个元素 后面可以在跟上 += 或者是 =, 用来决定是添加(插入),还是修改。
删除操作:
标准方式为: $b-name也可以为$b.name- $b-dd 也可以为b.dd- 其中name和dd可以使用数字变量$0-$9 如: $b-2 $b-a $b-$1 也可以对bson和bsonArray结构的子文档进行删除,如: $b = {[11,12,{b11:"aaa",b22:"bbb"}]} $b.2-b22 则执行后的结果为: $b = {[11,12,{b11:"aaa"}]} $b = {a1:12, b1:{b11:"aaa",b22:"bbb",b33:"ccc"}} $b.b1-b22 或者 $b[b1]-b22 执行结果为: $b = {a1:12, b1:{b11:"aaa", b33:"ccc"}}
文件读写
BsonDocument与BsonArray都可以进行文件的读入与存写,文件路径使用简单表达式SSExpr,参见 Simple String Expression,如果字符串结果以\开头,则自动加上BizRunner的安装路径。
文件的存储的方式有两种:一种是Json格式,此时指定的文件名称以.json为扩展名;另一种是bson格式,此时指定的文件名称以.bson为扩展名。Json格式的文件具有较好的可读性,而Bson格式的文件读写具备较高的效率。
Json的文件导入:注意标准的导入必须使用标准的JSON格式,要使用FWScript定义的方式,则使用特殊方式(见下面,在路径最前面加个星号*)。 $b = {<c:\bizat\tmp\t.json $file = 'c:\bizat\tmp\t.json' $b = {<$file $b = {<"c:\\bizat\\tmp\\t.json" BsonArray的文件导入 (因为文件的格式不一样,所以需要分开) $ba = {[<c:\bizat\tmp\t.json $file = 'c:\bizat\tmp\t.json' $ba = {[<$file $ba = {[<"c:\\bizat\\tmp\\t.json" 如果希望利用FWScript的定义方式,可以让BizRunner选择使用自己的parser,此时在路径最前面加个星号即可。 如: $file = '*c:\bizat\tmp\t.json' $b = {<$file $b = {<"*c:\\bizat\\tmp\\t.json" $ba = {[<*c:\tmp\t.json 文件的写入: $b = {>c:\bizat\tmp\t.json 或者 $b = {[>c:\bizat\tmp\t.json 后同,因为可以判断$b的类型采取不同的方法。 $file = 'c:\bizat\tmp\t.json' $b = {>$file $b = {>"c:\\bizat\\tmp\\t.json"