如何使用 Ruby 在 json 数组中分配序列号?

How to assign serial count in json array using Ruby?

我想使用 ruby 将序列计数分配给 JSON 数组。这是我的例子 JSON

{
    "product_name" : "Prod 1",
    "product_description" : "Prod Description 1",
    "product_id" : "111",
    "product_attribute" : [{
            "name" : "Size",
            "value" : "10 mm"
        }, {
            "name" : "Color",
            "value" : "Red"
        }, {
            "name" : "Width",
            "value" : "25 mm"
        }, {
            "name" : "Length",
            "value" : "60 mm"
        }
    ]
}

我的预期结果是如何分配新键将计算产品属性数组并动态分配值

{
    "product_name" : "Prod 1",
    "product_description" : "Prod Description 1",
    "product_id" : "111",
    "product_attribute" : [{
            "name" : "Size",
            "value" : "10 mm",
            "key_num" : 1
        }, {
            "name" : "Color",
            "value" : "Red",
            "key_num" : 2
        }, {
            "name" : "Width",
            "value" : "25 mm",
            "key_num" : 3
        }, {
            "name" : "Length",
            "value" : "60 mm",
            "key_num" : 4
        }
    ]
}

在上面你可以看到我添加了“key_num”1 到 4。我有时可以将产品属性设置为 5、10、8 等,我需要分配那些“key_num” " 动态地基于 product_attribute

的计数

为此,最简单的方法是将 json 转换为 ruby 映射,应用修改并将其转换回来。

require 'json'
map = JSON.parse json

map["product_attribute"].each.with_index(1) do |h, idx|
  h["key_num"] = idx # mutating the map inplace
end

JSON.dump map
#⇒ "{...[{\"name\":\"Size\",\"value\":\"10 mm\",\"key_num\":1},...}"