Преобразовать значение JSON в другую форму JSON? - PullRequest
1 голос
/ 10 ноября 2019

У меня есть следующий файл JSON, который мне нужно преобразовать.

Исходный файл JSON:

{
  "configs": [ 
    {
      "ignore": "this",
      "key": "abc123",      
      "default": false
    },    
    {
      "ignore": "that",
      "key": "def123",    
      "default": "#F5F5F5"
    },
    {
      "type": "color",
      "key": "ghi123",      
      "default": "#3d4246"
    }
  ]    
}

Я хочу преобразовать JSON, чтобы он выглядел следующим образом:

{
   "configs": [
    {
        "abc123": false
    },
    {
        "def123": "#F5F5F5"        
    },
    {
        "ghi123": "#3d4246"
    }
   ] 

}

Как я могу это сделать? требуется 'JSON'

original_json = JSON.parse("...") #original JSON shape

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

С помощью Enumerable # each_with_object вы можете создавать новые хэши как хотите. Затем вы можете преобразовать его в JSON.

original_hash = JSON.parse(original_json)
new_hash = original_hash[:configs].each_with_object({ configs: [] }) do |item, new_hash|
  new_hash[:configs] << {
    item[:key] => item[:default]
    # add another key value pair if you want
  }
end

new_hash.to_json
#=>  {
#      "configs": [
#        {
#          "abc123": false
#        },
#        {
#          "def123": "#F5F5F5"
#        },
#        {
#          "ghi123": "#3d4246"
#        }
#      ]
#    }
1 голос
/ 10 ноября 2019

Вероятно, есть более чистый путь, но вот выстрел:

require 'json'

original_json = JSON.parse('{
  "configs": [ 
    {
      "ignore": "this",
      "key": "abc123",      
      "default": false
    },    
    {
      "ignore": "that",
      "key": "def123",    
      "default": "#F5F5F5"
    },
    {
      "type": "color",
      "key": "ghi123",      
      "default": "#3d4246"
    }
  ]    
}')

original_json['configs'].each do |h| 
  k = h["key"]
  v = h["default"]
  h.clear
  h[k] = v
end

original_json.to_json
#=> {"configs":[{"abc123":false},{"def123":"#F5F5F5"},{"ghi123":"#3d4246"}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...