質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

286閲覧

[Ruby] JSのundefinedのように、JSON化するとプロパティ自体が無くなるようにしたい

vc3000

総合スコア196

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2022/08/09 10:27

JSだと、

javascript

1let x = 0; 2let obj = { 3 a: 123, 4 b: x > 1 ? x : undefined 5}; 6console.log(JSON.stringify(obj)); 7// => {"a":123}

のように b: undefined であればJSONからプロパティ自体が無くなります。
Rubyには undefined が存在しないので、

ruby

1require "json" 2x = 0 3obj = { a: 123 } 4obj[:b] = x if x > 1 5puts JSON.generate(obj)

と書けば良いですが、できればJSのように単一の { ... } で書きたいです。
良い方法はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

module JSON def generate_without_undef(obj) generate( obj.delete_if{|k,v| v == :undefined } end end

として

obj = { a: 123, b: x > 1 ? x : undefined } JSON.generate_without_undef(obj)

このままですと objが変わってしまうので、変えたくなければ
generate( obj.dup.delete_if{|k,v| v == :undefined }

投稿2022/08/11 12:55

編集2022/08/11 12:55
winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

generateを再定義するのでしょうかね。

Ruby

1require "json" 2 3module JSON 4 alias generate_orig generate 5 module_function :generate_orig 6 module_function def generate(obj,state=nil) 7 case obj 8 when Hash 9 JSON.generate_orig(obj.filter{|k,v| v!=:undef},state) 10 else 11 JSON.generate_orig(obj,state) 12 end 13 end 14end 15 16x = 0 17obj = { 18 a: 123, 19 b: x > 1 ? x : :undef 20} 21 22puts JSON.generate(obj)

:undefのところは適当に変更。
(最近の機能を使ってもっとスマートに書けるのかもしれませんが)

投稿2022/08/09 12:58

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2022/08/12 16:27

generateを再定義すればネストされていても再帰的に使ってくれるかと思ったのですが、ネストされていると駄目ですね。 もっと違う物を再定義しないと行けないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問