ここでレールプログラマーを始めます。ハッシュをxmlとjsonの両方に変換しようとしていますが、出力が異なります。
ハッシュは次のとおりです。
{:exchangeRates=>[{:baseCurrency=>"USD", :quoteCurrency=>"EUR", :amount=>1, :nprices=>1, :conversions=>[{:date=>Tue, 20 Nov 2012 21:00:00 +0000, :ask=>"0.7813", :bid=>"0.7813"}]}, {:baseCurrency=>"CAD", :quoteCurrency=>"EUR", :amount=>1, :nprices=>1, :conversions=>[{:date=>Tue, 20 Nov 2012 21:00:00 +0000, :ask=>"0.7839", :bid=>"0.7837"}]}]}
対応するレンダリングコードは次のとおりです
format.json { render :json => { :response => rates.to_hash() } }
これがJSONです(これが私が欲しいものです)
{"response": {"exchangeRates": [
{
"baseCurrency": "USD",
"quoteCurrency": "EUR",
"amount": 1,
"nprices": 1,
"conversions": [{
"date": "2012-11-20T21:00:00+00:00",
"ask": "0.7813",
"bid": "0.7813"
}]
},
{
"baseCurrency": "CAD",
"quoteCurrency": "EUR",
"amount": 1,
"nprices": 1,
"conversions": [{
"date": "2012-11-20T21:00:00+00:00",
"ask": "0.7839",
"bid": "0.7837"
}]
}
]}}
これが私のxmlレンダリングコードです:
format.xml { render :xml => rates.to_hash(), :root => 'response' }
これがxml出力です(配列に配置する場所に追加のタグがあります):
<response>
<exchangeRates type="array">
<exchangeRate>
<baseCurrency>USD</baseCurrency>
<quoteCurrency>EUR</quoteCurrency>
<amount type="integer">1</amount>
<nprices type="integer">1</nprices>
<conversions type="array">
<conversion>
<date type="datetime">2012-11-20T21:00:00+00:00</date>
<ask>0.7813</ask>
<bid>0.7813</bid>
</conversion>
</conversions>
</exchangeRate>
<exchangeRate>
<baseCurrency>CAD</baseCurrency>
<quoteCurrency>EUR</quoteCurrency>
<amount type="integer">1</amount>
<nprices type="integer">1</nprices>
<conversions type="array">
<conversion>
<date type="datetime">2012-11-20T21:00:00+00:00</date>
<ask>0.7839</ask>
<bid>0.7837</bid>
</conversion>
</conversions>
</exchangeRate>
</exchangeRates>
</response>
ご覧のとおり、追加の「配列」属性タグ、つまりexchangeRatesとコンバージョンが追加されています。これをjsonと同じ形式にするにはどうすればよいですか?また、どのタグにも属性は必要ありません。:root =>'response'などの属性を渡すことができることは知っていますが、かなりの時間を探した後、これらの属性のリストをWeb上で見つけることができないようです。
どんな助けでも大歓迎です、ありがとう!