簡體   English   中英

從兩個ruby數組生成適當的JSON輸出

[英]Generate from two ruby arrays an appropriate JSON output

我有兩個簡單的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"
    ]
}

如何在不循環的情況下映射兩者?

array = keys.zip(values)
#=> [[:key0, :value0], [:key1, :value1], [:key2, :value2]]

Array#zip將self的元素合並到參數array的相應元素,您將獲得一個數組數組。 您可以將其轉換為哈希...

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

...,然后您可以將其轉換為json字符串。

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

使用Array#zip創建值對,然后對其進行哈希處理:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM