Ruby on rails 如何在ruby中解码Amazon QLDB的ion_二进制
我用ruby玩Amazon的QLDB,并使用aws sdk QLDB和aws sdk QLDSessiongem。我得到的结果是IonBinary。但无法解码和解析它 下面是代码Ruby on rails 如何在ruby中解码Amazon QLDB的ion_二进制,ruby-on-rails,ruby,amazon-web-services,aws-sdk,amazon-qldb,Ruby On Rails,Ruby,Amazon Web Services,Aws Sdk,Amazon Qldb,我用ruby玩Amazon的QLDB,并使用aws sdk QLDB和aws sdk QLDSessiongem。我得到的结果是IonBinary。但无法解码和解析它 下面是代码 cred = Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY']) qldb_session_client = Aws::QLDBSession::Client.new(region: 'ap-so
cred = Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY'])
qldb_session_client = Aws::QLDBSession::Client.new(region: 'ap-southeast-1', credentials: cred)
start_session_req = Aws::QLDBSession::Types::StartSessionRequest.new
start_session_req.ledger_name = 'ledger-test'
command_request = Aws::QLDBSession::Types::SendCommandRequest.new
command_request.start_session = start_session_req
resp = qldb_session_client.send_command(command_request)
session_token = resp.start_session.session_token
command_request = Aws::QLDBSession::Types::SendCommandRequest.new
command_request.session_token = session_token
command_request.start_transaction = Aws::QLDBSession::Types::StartTransactionRequest.new
resp = qldb_session_client.send_command(command_request)
transaction_id = resp.start_transaction.transaction_id
command_request = Aws::QLDBSession::Types::SendCommandRequest.new
command_request.session_token = session_token
command_request.execute_statement = Aws::QLDBSession::Types::ExecuteStatementRequest.new
command_request.execute_statement.transaction_id = transaction_id
command_request.execute_statement.statement = 'select * from testing'
resp = qldb_session_client.send_command(command_request)
现在如果我使用下面的代码
resp.execute_statement.first_page.values[0]
我明白了
{:ion_binary=>"\xE0\x01\x00\xEA\xEE\x9A\x81\x83\xDE\x96\x87\xBE\x93\x89firstname\x88lastname\xDE\x9D\x8A\x8Dtesting first\x8B\x8Ctesting last", :ion_text=>"[FILTERED]"}
我无法使用二进制解析器对这个ion_二进制文件进行解码。对流进行解码很可能需要使用。这就是说,有点像下面应该工作 Aws::EventStream::Decoder.new.decode( StringIO.new(结果[:离子\二进制]) )
解码到什么?这是一个完全有效的二进制文件。@AlekseiMatiushkin谢谢你的消息。此二进制文件包含中间的字符串。它应该返回firstname:testing first lastname:testing last这一个是AWS ION Binary([)。我使用了各种解包选项来解包这一个。但是工作不正常。然后我们必须解析它。ION_text也应该返回纯文本,但在本例中它也返回nil。
{firstname:'testing first',last name:'testing last'}
谢谢..在这之前我已经这样做了,实际上为#'引发了一个错误未定义的方法
read','好的,它需要IO
→ 把你的字符串包起来。我会更新答案。@alekesei谢谢。现在我得到的是可枚举的,但是当我遍历可枚举的时候,它返回了nil。但至少我得到的是可枚举的。在我发布的链接中,它声明了decode
返回可枚举的
。你说“它返回nil
”是什么意思?此可枚举的元素数是多少?感谢您的帮助。主要是sdk gem中的问题。可枚举的元素数为零。我们已将该元素发布到sdk的GitHub页面。他们正在调查。