Project

General

Profile

Feature #15541

Add alias symbolize_keys for symbolize_names kwarg for JSON.parse

Added by baweaver (Brandon Weaver) over 1 year ago. Updated 9 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:91115]

Description

https://github.com/ruby/psych/issues/341

When trying to symbolize keys on JSON parsing, it's really hard to remember the name symbolize_names:

JSON.parse(data, symbolize_names: true)

I would like to propose that we change this keyword to symbolize_keys to be more clear:

JSON.parse(data, symbolize_keys: true)

The documentation for this method also reflects the confusion: http://ruby-doc.org/stdlib-2.6/libdoc/json/rdoc/JSON.html#method-i-parse-21

symbolize_names: If set to true, returns symbols for the names (keys) in a JSON object. Otherwise strings are returned. Strings are the default.

The same issue came up in Psych not too long ago:

https://github.com/ruby/psych/issues/341

I believe the current name causes confusion. Would it be possible to add an alias to this keyword for clarity?

Updated by shevegen (Robert A. Heiler) over 1 year ago

Personally I think that alias name would make sense. With a new alias the backwards
behaviour would also be retained.

Updated by baweaver (Brandon Weaver) over 1 year ago

shevegen (Robert A. Heiler) wrote:

Personally I think that alias name would make sense. With a new alias the backwards
behaviour would also be retained.

An alias would probably be best as otherwise it would cause breaking changes, and I think we'd rather avoid that.

Updated by jsc (Justin Collins) 9 months ago

This would be a nice simple addition, as I have gotten this wrong several times. JSON.parse does not raise any error when the wrong option name is given, so you only notice when trying to retrieve values with symbol keys returns nil. After some debugging you might realize the keys are still strings.

Note that MultiJson uses symbolize_keys: https://www.rubydoc.info/gems/multi_json/MultiJson#load-instance_method which may be where some confusion is coming from.

Also available in: Atom PDF