2017-01-05 13 views
3

私はRubyを初めて使用しています。私は以下の形式で既存のJSONファイルを持っています。Rubyで既存のJSON配列に新しい値を追加します。

{ 
    "ASRtest": { 
    "ASRHDR": "This is asr HDR", 
    "ASRTestType": "DevTest", 
    "Scenario": [ 
     { 
     "ScenarioNumber": 1, 
     "ScenarioName": "HTTP Validation", 
     "ScenarioDescription": "Validate if the API alows access over HTTP", 
     "ScExecutionStatus": "Execution Complete", 
     "ScenarioStatus": "In-Complete", 
     "ScenarioSeverity": false, 
     "TestCase": [ 
      { 
      "TestCaseNumber": 1, 
      "TestCaseName": "HTTP Validation - using POST method ", 
      "TcExecutionStatus": "Execution Error", 
      "TcStatus": "NA", 
      "TcSeverity": "NA" 
      } 
     ] 
     } 
    ] 
    } 
} 

私はRubyプログラムでこのファイルを読んで、私は以下のコード

@template_file = JSON.parse(File.read('SummaryTemplate.json')) 
@ASR_Test = @template_file['ASRtest'] 
@ASR_Test 
@scenario = @ASR_Test['Scenario'] 

Iを使用してファイルを読んだ

{ 
    "ASRtest": { 
    "ASRHDR": "This is asr HDR", 
    "ASRTestType": "DevTest", 
    "Scenario": [ 
     { 
     "ScenarioNumber": 1, 
     "ScenarioName": "HTTP Validation", 
     "ScenarioDescription": "Validate if the API alows access over HTTP", 
     "ScExecutionStatus": "Execution Complete", 
     "ScenarioStatus": "In-Complete", 
     "ScenarioSeverity": false, 
     "TestCase": [ 
      { 
      "TestCaseNumber": 1, 
      "TestCaseName": "HTTP Validation - using POST method ", 
      "TcExecutionStatus": "Execution Error", 
      "TcStatus": "NA", 
      "TcSeverity": "NA" 
      } 
     ] 
     }, 
     { 
     "ScenarioNumber": 2, 
     "ScenarioName": "SC2", 
     "ScenarioDescription": "Desc", 
     "ScExecutionStatus": "Execution Complete", 
     "ScenarioStatus": "In-Complete", 
     "ScenarioSeverity": false, 
     "TestCase": [ 
      { 
      "TestCaseNumber": 1, 
      "TestCaseName": "Some Name ", 
      "TcExecutionStatus": "Execution Error", 
      "TcStatus": "NA", 
      "TcSeverity": "NA" 
      } 
     ] 
     } 
    ] 
    } 
} 

のように、このファイルに別のシナリオにしたいのです下記のコードを試してください

@scenario[1]['ScenarioNumber'] = 2 

それは私にエラーを与えていません。[n]:NilClass(NoMethodError) 変数@scenarioは1回の出現しか持たず、2回目の出現を追加できません。

誰かがこの問題を助けてくれますか?

答えて

0

をあなたはArrayオブジェクトを持っているので、あなたは、この配列内の新しいハッシュを追加したい場合は、ちょうどこのようArray#<<メソッドを使用します。

Arrayはオブジェクトなので、このオブジェクトの内部にデータを追加できます。

new_scenario = { 
    "ScenarioNumber" => 2, 
    "ScenarioName" => "SC2", 
    "ScenarioDescription" => "Desc", 
    "ScExecutionStatus" => "Execution Complete", 
    "ScenarioStatus" => "In-Complete", 
    "ScenarioSeverity" => false, 
    "TestCase" => [ 
    { 
     "TestCaseNumber" => 1, 
     "TestCaseName" => "Some Name ", 
     "TcExecutionStatus" => "Execution Error", 
     "TcStatus" => "NA", 
     "TcSeverity" => "NA" 
    } 
    ] 
} 

@scenario << new_scenario 

@template_fileは今new_scenario

+0

こんにちはLukas私はすでにこのアプローチを使用しようとしていて、うまくいきませんでした。シナリオ内の現在のオブジェクトを新しいオブジェクトに置き換えるだけです。 Suryaが投稿した答えはうまくいった。 – Anoop

+0

お返事ありがとうございました。あなたの時間を感謝します。 – Anoop

+0

こんにちはルーカス私はあなたの解決策をもう一度試してみました。私がしなければならなかった唯一の調整は、TestCase変数を動的に設定するための長い参照でした。 new_scenario ['TestCase'] [0] ['TestCaseNumber'] = 2 – Anoop

1

@scenario = @ASR_Test['Scenario']から、@scenarioがありますのでです:

[ 
    { 
    "ScenarioNumber": 1, 
    "ScenarioName": "HTTP Validation", 
    "ScenarioDescription": "Validate if the API alows access over HTTP", 
    "ScExecutionStatus": "Execution Complete", 
    "ScenarioStatus": "In-Complete", 
    "ScenarioSeverity": false, 
    "TestCase": [ 
     { 
     "TestCaseNumber": 1, 
     "TestCaseName": "HTTP Validation - using POST method ", 
     "TcExecutionStatus": "Execution Error", 
     "TcStatus": "NA", 
     "TcSeverity": "NA" 
     } 
    ] 
    } 
] 

@scenario[1]が生成されますと言って:nil

を意味する@scenario[1]['ScenarioNumber']が言って例外が発生します呼び出し:

`[]=' for nil:NilClass (NoMethodError) the variable @scenario 

解決するためにそれには、Hashオブジェクトを追加する必要がありますインデックス与えられた:

@scenario[1] = {} 

、あなたの上記のコードは動作します:@scenario

@scenario[1]['ScenarioNumber'] = 2 
+0

どうもありがとうスーリヤが含まれます。出来た。 – Anoop

+0

どうすれば受け付けますか?さて、今すぐ見つけました。 – Anoop

+0

Surya申し訳ありませんが、上記のソリューションは部分的にしか動作しません。シナリオ配列の問題を修正しましたが、テストケース配列の問題は解決しません。 – Anoop