【问题标题】:How to check for value while creating JSON output如何在创建 JSON 输出时检查值
【发布时间】:2017-04-19 20:43:06
【问题描述】:

我正在创建 JSON 输出,并希望在创建键值对之前检查值。有没有办法在创建 JSON 而不是稍后添加它时做到这一点?

我正在创建这个 JSON 输出:

sample_json = {
  abc: "abc",
  xyz: "xyz",
  pqr: some_value unless some_value.blank?
}

在此示例中,我无法在创建 JSON 字符串时检查 unless some_value.blank?,因此我首先创建 JSON,然后在检查空白值后单独添加 pqr: some_value,如下所示:

sample_json = {
  abc: "abc",
  xyz: "xyz"
}

sample_json[:pqr] = some_value unless some_value.blank?

有没有办法像第一个示例一样在创建 JSON 本身时添加检查?

【问题讨论】:

  • 向我们展示您这样做的尝试。没有你努力的证据,看起来你很快就放弃了,希望我们为你写。阅读“minimal reproducible example”和“How much research effort is expected of Stack Overflow users?
  • 不,没有办法进入 JSON 序列化过程。我会生成初始 JSON,计算你想要的任何值,然后将该值添加到原始对象并重新序列化它。但听起来你的问题是一个“XY Problem”,当你应该问 X 时,你问的是 Y。总体目标是什么?您尝试对 JSON 执行的操作很简单,但您的描述并不好。请参阅“minimal reproducible example”和链接页面。顺便说一句,您的示例 JSON 不会创建有效的 JSON 输出。
  • 是所有值都需要验证,还是只需要验证其中一个(或几个)?您如何分配所有其他值?显示更多您的真实代码,以便我们更好地了解您的问题。

标签: ruby-on-rails json ruby


【解决方案1】:

我不认为你可以。

但是,还有其他一些处理方法,假设您有 active_support,您可以使用哈希 compact (sample_json.compact),这将删除带有 nil 值的键值对。

但如果你确实需要!v.blank?,你可以这样做: sample_json.select { |_, value| !value.blank? }

【讨论】:

    【解决方案2】:

    我会这样处理:

    require 'active_support/core_ext/object/blank'
    require 'json'
    
    some_value = 'foo'
    hash = {
      abc: "abc",
      xyz: "xyz"
    }
    
    hash.merge!(pqr: some_value) unless some_value.blank?
    puts hash.to_json 
    
    # >> {"abc":"abc","xyz":"xyz","pqr":"foo"}
    

    如果some_value = '' 会导致:

    # >> {"abc":"abc","xyz":"xyz"}
    

    不要创建 JSON,然后尝试更改它。而是创建基础对象,进行测试,然后合并更改,然后序列化为 JSON。

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 1970-01-01
      • 2018-10-03
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      相关资源
      最近更新 更多