转换语言
例子
易对接通过转换语言脚本,完成原格式数据到新格式数据的转换,请看以下示例:
原数据:
{
"name": "张三",
"city": "北京"
}
转换脚本:
{
"姓名":.name,
"城市":.city
}
转换结果:
{
"姓名" : "张三",
"城市" : "北京"
}
通过以上简单的例子,简单了解脚本语言的功能,下面是详细介绍:
语言基础
转换语言主要由三部分组成:变量、控制语句、函数。
变量
先看一个示例:
转换脚本:
let postalcode="100080"
{
"姓名":.name,
"城市":.city,
"邮编": $postalcode
}
转换结果:
{
"姓名" : "张三",
"城市" : "北京",
"邮编" : "100080"
}
通过示例可以看出:
- 定义使用let关键字完成定义和赋值
- 不需要定义类型
- 使用"$+变量名称"引用变量
- 变量定义放在对象定义之外
控制语句
转换语言支持条件判断和循环语句。下面通过示例了解:
条件判断
转换脚本:
{
"姓名":.name,
"城市":.city,
"简称": if (.city=="北京") "BJ" else "XA"
}
转换结果:
{
"姓名" : "张三",
"城市" : "北京",
"简称" : "BJ"
}
通过以上示例,可以看出条件判断语句的使用方法:
- 使用if 发起判断,条件放在括号中
- 第二部分是条件为真时返回的数据(此处为BJ)
- else之后是 条件不成立时返回的数据(此处为XA)
循环
先看一个示例:
原数据:
{
"name": "张三",
"city": "北京",
"records": [
{
"start": "2020-8",
"end": "2020-10",
"address":"海淀区"
},
{
"start": "2020-11",
"end": "2021-1",
"address":"大兴区"
},
{
"start": "2021-2",
"end": "2021-5",
"address":"朝阳区"
}
]
}
转换脚本:
{
"姓名":.name,
"城市":.city,
"出行记录":[
for
(.records)
{
"开始时间": .start,
"结束时间": .end,
"主要活动区域": .address
}
]
}
转换结果:
{
"姓名" : "张三",
"城市" : "北京",
"出行记录" : [ {
"开始时间" : "2020-8",
"结束时间" : "2020-10",
"主要活动区域" : "海淀区"
}, {
"开始时间" : "2020-11",
"结束时间" : "2021-1",
"主要活动区域" : "大兴区"
}, {
"开始时间" : "2021-2",
"结束时间" : "2021-5",
"主要活动区域" : "朝阳区"
} ]
}
通过以上示例,可以总结循环语句使用的基本规则:
- 通过for发起
- 循环访问的对方为数组,单独一行,并且放在括号中
- 循环产生的结果(7~11行)定义,通过“.+对象名称”的方式访问数组内容
函数
使用循环语句部分的数据示例,使用脚本:
{
"姓名":.name,
"城市":.city,
"活动地点数量":size(.records)
}
转换结果:
{
"姓名" : "张三",
"城市" : "北京",
"活动地点数量" : 3
}
size是计算数组长度函数。
函数参考
_first
查找第一个非空对象
_first([null,{"a":"b"}])
返回
{"a":"b"}
contains
判断包含关系。用于三个场合:
1.数组是否报一个元素
contains(1, [1, 2, 3]) => true
2.对象是否包含某个key值
contains("no", {"no" : false}) => true
contains(1, {"1" : false}) => true
3.字符串是否包含子字符串
contains("ab", "abc") => true
size
返回大小。用于三个场合:
1.判断数组大小
size([1, 2, 3]) => 3
2.判断对象子元素个数
size({"1" : 3}) => 1
3.判断字符串长度
size("abcdef") => 6
error
返回错误信息,停止转换过程。
if (not(is-array(.things))) error("'things' is not an array"
fallback
返回第一个非null、[]、{}的值
fallback(null, [], {}, "value")
min
返回较小的值
min(10, 1) -> 1
min("a", "b") -> "a"
min(10, null) -> null
max
返回较大值
max(10, 1) -> 10
max("a", "b") -> "b"
max(10, null) -> null
is-number
判断是不是数值
is-number(null) => false
is-number(1) => true
is-number(1.0) => true
is-number("1") => false
is-integer
判断是不是整型
is-integer(null) => false
is-integer(1) => true
is-integer(1.0) => false
is-integer("1") => false
is-decimal
判断是不是浮点数值
is-decimal(null) => false
is-decimal(1) => false
is-decimal(1.0) => true
is-decimal("1.0") => false
number
转换为数值类型
number(23) => 23
number("23") => 23
number("023") => 23
number(23.0) => 23.0
number(null) => null
number("ab") => error
number("",0) => 0