Как назначить серийный счет в массиве json с помощью Ruby? - PullRequest
0 голосов
/ 03 августа 2020

Я хочу присвоить массиву JSON последовательный подсчет, используя ruby. Вот мой пример 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 et c. и мне нужно назначить эти "key_num" динамически на основе количества product_attribute

1 Ответ

0 голосов
/ 03 августа 2020

Чтобы это работало, проще всего было бы преобразовать 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},...}"
...