我将此字符串传递给名为token的变量。
{ “reportStatusToken”: “NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA ==”}
但是我一直在尝试使用SSIS中的表达式构建器来修剪该字符串以获得令牌(请参阅下一个块以获得最终结果)。但我不能让它正确出来。也许我使用了错误的字符串函数。我用过Trim并替换了。两者都不正常。
NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA ==
之后将其保存回变量,以便我可以使用此令牌在其他包上调用它。这是包级别范围,数据类型字符串。任何帮助都会有所帮助。
答案 0 :(得分:1)
在这样的情况下,我发现反转字符串会让事情变得更容易。
{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}
1 2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
}"==ANxYTMxQjM0gDN0QTM7QzNyMzOhVTM0IDOwIWYjmVjN":"nekoTsutatStroper"{
如果字符串被反转,FINDSTRING
的值为1将找到第一个(最后一个)引用{position 2}。然后,我们需要使用该位置来帮助我们找到下一个位置{位置48}。我创建两个Int32类型的SSIS变量并使用以下公式
PositionUltimateQuoteReverse := FINDSTRING(REVERSE(@[User::token]), "\"", 1)
PositionPenultimateQuoteReverse := FINDSTRING(REVERSE(@[User::token]), "\"", @[User::PositionUltimateQuoteReverse])-1
当我在它时,我将使用这两个值来确定两个引号之间有多少个字符。我在这里减去2,因为上面的位置包括引号本身所以从每一端拿一个。
tokenLength := @[User::PositionPenultimateQuoteReverse] - @[User::PositionUltimateQuoteReverse] -2
我们需要的最终计算是确定 where 以开始切片和切块。我们只是做数学加一,找到倒数第二个双引号的位置。
tokenStartPosition := LEN(@[User::token]) - @[User::PositionPenultimateQuoteReverse] +1
最后,我们使用所有这些中间计算来查找最终标记
SUBSTRING(@[User::token], @[User::tokenStartPosition], @[User::tokenLength])
商业智能标记语言biml使我们能够将一种XML方言翻译成SSIS包。只需下载BIDS Helper并安装即可。右键单击SSIS项目,然后选择Add new biml file。双击BimlScript.biml并使用以下内容替换内容。完成后,右键单击并选择生成新的SSIS包。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="so_33134095">
<Variables>
<Variable DataType="String" Name="token">{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}</Variable>
<Variable
DataType="Int32"
Name="PositionUltimateQuoteReverse"
EvaluateAsExpression="true"><![CDATA[FINDSTRING(REVERSE(@[User::token]), "\"", 1) ]]></Variable>
<Variable
DataType="Int32"
Name="PositionPenultimateQuoteReverse"
EvaluateAsExpression="true"><![CDATA[FINDSTRING(REVERSE(@[User::token]), "\"", @[User::PositionUltimateQuoteReverse])-1]]></Variable>
<Variable
DataType="Int32"
Name="tokenLength"
EvaluateAsExpression="true">@[User::PositionPenultimateQuoteReverse] - @[User::PositionUltimateQuoteReverse] -2</Variable>
<Variable
DataType="Int32"
Name="tokenStartPosition"
EvaluateAsExpression="true">LEN(@[User::token]) - @[User::PositionPenultimateQuoteReverse] +1</Variable>
<Variable
DataType="String"
Name="justToken"
EvaluateAsExpression="true">SUBSTRING(@[User::token], @[User::tokenStartPosition], @[User::tokenLength]) </Variable>
</Variables>
</Package>
</Packages>
</Biml>