Techioz Blog

JSON文字列をコマンドライン引数としてRubyスクリプトに渡しますか?

概要

現在、Azure DevOps パイプライン スクリプトの編集に取り組んでいますが、既存の実装をリファクタリングしようとしているときに障害に遭遇しました。

YAML によって呼び出される Ruby スクリプトに JSON 文字列を引数として渡したいと考えています。

これを達成するためにさまざまな方法を試しましたが、うまくいきませんでした。私のスクリプトスキルは錆び付いているので、それはあります。

誰かが私に正しい方向を教えてくれれば幸いです。

ありがとう。

JSON: {“名前”: “ジョン”、“年齢”: 10、“都市”: “ニューヨーク”}

脚本:

require 'json'

namespace: test do
  task :getConfigs, [:json_string] do |task, args|
        json_string = args[:json_string]
        configs = JSON.parse(json_string)
        val1 = configs['name']
        val2 = configs['age']
        puts "#{val1} is #{val2} years old."
    end

YAML:

- script: bash -i -c 'rake test:getConfigs["$json_data"] //json_data being a Pipeline variable.

ターミナルでローカルに呼び出す方法:

 rake "test:getConfigs[\"{\"name\": \"John\", \"age\": 10, \"city\": \"New York\"}\"]"

または文字をエスケープしない他のバリアント。

「JSON::ParserError: 767: Expected token at ‘name’: “John”」というエラーが発生し続けます

解決策

ここで行う必要があるのは、カンマもエスケープし、角括弧内の二重引用符を削除することです。

以下のコマンドは機能するはずです。

rake "test:getConfigs[{\"name\": \"John\"\, \"age\": 10\, \"city\": \"New York\"}]"