問題タブ [openstruct]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - openstruct を使用した未定義のメソッド 'each_pair'
私は OpenStruct を使用して、次のような json を操作していますOpenStruct.new '{"age":100,"name":"name"}'
:
NoMethodError:
undefined method `each_pair' for "{\"age\":100,\"name\":\"name\"":String
このコードはしばらく前に機能していましたが、現在は機能していません。
Ruby 2.1を使用しています
ruby - JSON 文字列を解析して属性を持つオブジェクトにする
現在、私のアプリは次の方法で JSON を解析しています。
しかし、このアプローチには問題があります。
- JSON では、次のようなルートレベルの配列が許可されますが
[{id: 1, name: "first"}, {id: 2, name: "second"}]
、OpenStruct ではそれらを処理して例外をスローすることはできません。 - OpenStruct はネストされた要素を処理しません。
RecursiveOpenStruct などのソリューションをいくつか見つけました。
- ネストされたハッシュを処理しますが、それでもトップレベルの配列を処理できません
- 配列にネストされたハッシュはハッシュのままです。
{data: [{id: 1, name: "first"}, {id: 2, name: "second"}]}
ここで.data[i]
は、それぞれがハッシュです。
ruby-on-rails - 一部のデータのみへのアクセスを許可する Ruby と OpenStruct
OpenStruct データ構造の配列があります。しかし、それらにアクセスしようとすると、アクセスすることしかできませんcountry
例えば
すべての国を返しますが、もしそうなら
多くの空白行が返されます。
ruby-on-rails - グループ化されたハッシュ内の一意のオブジェクト
.group_by
文字列をキーとして、AR オブジェクトを値として、メソッドによって作成されたハッシュがあります。そして、フィールドが重複しているARオブジェクトを取り除きたい(他のフィールドは同じかもしれないし、そうでないかもしれない)。
このスニペットを作成した質問を明確にするために:
grouped_hash
ここは:
今、結果fid
として、各キーに一意の s を持つハッシュが必要です。
私のソリューションにはいくつかのアクションが必要で、見栄えが悪いです。
最もエレガントな(おそらく1ライナー)効率的な方法(ハッシュの再作成なし)を探しています。
ruby-on-rails - Ruby: オブジェクトのメソッドの 1 つが呼び出されているかどうかを判断できますか?
正しい質問をしているかどうかさえわかりません。問題に間違ってアプローチしている可能性がありますが、基本的には次のような状況があります。
基本的に、これらの条件をすべて満たす必要がありますが、これにどのようにアプローチすればよいかわかりません (今日 Ruby を学習したばかりです)。
内部変数にアクセスするためのドット表記に注意してください。それ以外の場合は、プロファイルをシンボルのハッシュにするだけです。だから私は2つの方法を試しましたが、そこにたどり着くだけです
方法 1:プロファイルを OpenStruct にする
これにより、ドット表記を使用して名前、年齢、性別にアクセスできるようになり、キーが存在しない場合は自動的に nil が返されますが、obj.profileはHashではなくOpenStruct型です。
方法 2:プロファイルを独自のクラスにする
これにより、それらをインスタンス変数として設定し、存在しない場合はmethod_missingを使用して nil を返すことができます。しかし、私は再びobj.profileが正しいタイプ/クラスではないという問題に遭遇しました
足りないものはありますか?おそらく区別する方法はありますか
ゲッター関数で、ハッシュまたはその他のいずれかを返しますか?
プロファイルのカスタム クラスによって返されるものを変更して、代わりにハッシュを返すことはできますか?
obj.profile の get 関数でargsと **kwargs をチェックしようとしましたが、どちらも役に立たないようです。