同じキーが複数ありうるような、jsonコンフィグファイルを出力したいのですが、hashを利用すると、キーを重複して登録することは基本無理なので、回りくどいやり方でこの問題を回避しています。
{ "somekey": { "item1": "contents1" }, "somekey": { "item2": "contents2" } }
こういう感じの同じ名前のキーを複数もつjsonデータを出力したいのですが、hashを使うと、なかなかうまく行きません。
- 現状は、とりあえず
somekey-1
,somekey-2
などとキーの名前を分けてhashに入れて、jsonにしてからファイルに書き込み、その後そのファイルの文字列をgsubなどで置換する形でキーの名前を変更してごまかしていますが、他に何か方法はないでしょうか。 - もしご存知でしたら教えてください。。。
- 説明が不足していて、すみません。
なんの目的で使われたいのでしょうか?
「RubyのHash型をjsonモジュールのto_jsonを使うときに気をつけたいこと」(http://dev.classmethod.jp/client-side/take_care_when_using_the_to_json/)こちらの記事を読んだだけの素人です。仮に重複するキーを許すhashを作れても、JSON.parseでhashに戻すときに重複キーの値が1つになりそうな気がします。
h_aさん> ええ、おっしゃる通りですね。
mattnさん> 同じキーが複数ありうるような、jsonコンフィグファイルを出力するためです
JSON の仕様でオブジェクトには同じキーは作れません。配列なら分かりますが。 [{"foo": 1}, {"foo": 2}]
jsonの仕様を完全に把握してはいませんが、実際に、同じキーを複数もつjsonデータはたまに目にします。
RFC4627ではThe names within an object SHOULD be unique.となっているので、同じキーは推奨されないという感じで、禁止はされてないようです。(SHOULD == recommended)
おそらく殆どのパーサは上書きしてしまうか、例外を出してしまうでしょう。
おっしゃる通りプログラムから使うためには独自のパーザをかかないとだめでしょうね。JSONは型の管理が複雑なので自分でパーザを書くのは避けたいところです。
RFC4627、教えていただきありがとうございます。
回答1件
あなたの回答
tips
プレビュー