【问题标题】:How to serialize nil to JSON as nil, not an empty place?如何将 nil 序列化为 JSON 为 nil,而不是空的地方?
【发布时间】:2019-01-30 13:18:15
【问题描述】:

在我的控制器/动作中,我有一些值为 nil

def my_action
  @var1 = get_boolean_value || nil
  @var2 = get_int_value || nil
  @var3 = get_string_value || nil

  # there many more, any one can happen to be nil
end

当我在其中的视图中创建 JSON 对象时,nil 值会呈现为空白:

:javascript
  window.MyObj = {
    var1: #{@var1},
    var2: #{@var1},
    var2: #{@var3}
  }

问题在于,当一个值为 nil 时,它会呈现为一个空白空间,而不是 nil 本身。

:javascript
  window.MyObj = {
    var1: ,
    var2: 33,
    var2: 
  }

如何治疗?

【问题讨论】:

  • empty space ? javascript中没有这样的东西(不是你描述的方式)......但令人困惑的是你提到了JSON,而你的问题中没有JSON
  • 您正在将值插值到结果中。 #{@var1} 就像一个占位符,被实际值替换。因此,如果缺少该值,var1: #{@var1}, 将变为 var1: , - 它不会导致整行被删除,更不用说杂散逗号了。
  • 顺便说一句,它是“空字符串”,而不是“空白空间”。 : 后面的空格已经在您的模板中。
  • 如果您的方法返回非nil 值或nil,则分配中的|| nil 是多余的。如果是布尔返回值,它甚至会适得其反,因为它将false 变成nil

标签: javascript ruby-on-rails json ruby ruby-on-rails-5


【解决方案1】:

不应该重新发明轮子。使用JSONruby标准库序列化json:

require 'json'
json = {var1: nil, var2: 42, var2: nil}.to_json
#⇒ "{\"var1\":null,\"var2\":42,\"var3\":null}"

然后:

:javascript
  window.MyObj = json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2013-03-03
    • 2018-08-03
    相关资源
    最近更新 更多