【问题标题】:Generate from two ruby arrays an appropriate JSON output从两个 ruby​​ 数组生成适当的 JSON 输出
【发布时间】:2016-03-29 21:13:39
【问题描述】:

我有两个简单的 ruby​​ 数组和一个 JSON 字符串,将第一个数组的元素映射到第二个数组的元素:

keys = [:key0, :key1, :key2]
values = [:value0, :value1, :value2]

jsonString = {keys[0] => values[0], keys[1] => values[1], keys[2] => values[2]} 

将其写入文件:

file.write(JSON.pretty_generate(jsonString))

生成一个打印精美的 json 对象:

{
    "key0": "value0",
    "key1": "value1",
    "key2": "value2"
}

但是如何在不明确列出所有这些元素的情况下生成两个更大数组的相同输出?

我只需要类似的东西

jsonString = {keys => values}

但这会产生不同的输出:

{
    "[:key0, :key1, :key2]":
    [
        "value0",
        "value1",
        "value2"
    ]
}

如何在不循环遍历两者的情况下映射两者?

【问题讨论】:

    标签: arrays ruby json


    【解决方案1】:
    array = keys.zip(values)
    #=> [[:key0, :value0], [:key1, :value1], [:key2, :value2]]
    

    Array#zip 将 self 的元素与参数数组的相应元素合并,得到一个数组数组。您可以将其转换为哈希...

    hash = array.to_h
    # => {:key0=>:value0, :key1=>:value1, :key2=>:value2}
    

    ... 以及可以转换为 json 字符串的哈希值。

    jsonString = JSON.pretty_generate(hash)
    puts jsonString
    #{
    #  "key0": "value0",
    #  "key1": "value1",
    #  "key2": "value2"
    #}
    

    【讨论】:

    • 虽然此答案可能是正确且有用的,但如果您 include some explanation along with it 解释它如何帮助解决问题,则最好。如果有变化(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。谢谢!
    【解决方案2】:

    使用Array#zip 生成值对,然后对它们进行哈希处理:

    keys = [:key0, :key1, :key2]
    values = [:value0, :value1, :value2]
    Hash[keys.zip values]
    # => {:key0=>:value0, :key1=>:value1, :key2=>:value2}
    

    【讨论】:

    • 太好了,非常感谢。
    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2014-07-07
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2018-05-21
    • 2014-04-23
    相关资源
    最近更新 更多