Удалите разделители '-' в ключах JSON в Ruby - PullRequest
1 голос
/ 21 февраля 2011

Я пытаюсь прочитать некоторые данные JSON из Tumblr API.

Я использую гем Hashie для чтения значений как свойств объекта.Это должно сделать чтение легче / чище.

это превращается примерно так:

data['post']['title']

в это:

data.post.title

К сожалению, есть некоторые ключи, которые отображаются как '-' в качестве разделителя между этими словами:

regular-title: Mijn eerste post
format: html
regular-body: <p>post</p>

, поэтому я не могу использовать post.regular-title.Есть ли способ заменить все символы минус (-) на подчеркивание (_)?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Это сделает это:

def convert_object(data)
  case data
    when Hash
      data.inject({}) do |h,(k,v)|
        h[(k.respond_to?(:tr) ? k.tr('-', '_') : k)] = convert_object(v)
        h
      end
    when Array
      data.map { |i| convert_object(i) }
    else
      data
  end
end

Вы можете использовать это так:

convert_object(JSON.parse('{"something-here":"value","otherkey":{"other-key":"value-value"}}'))
0 голосов
/ 21 февраля 2011

Караси Иштван очень помог мне с решением.Я добавил проверку для массива в хэш.Таким образом, хэши в массивах в хэше также будут подчеркнуты.

def convert_hash(hash)
  case hash
  when Hash
    hash.inject({}) do |h,(k,v)|
      h[k.tr('-', '_')] = convert_hash(v)
      h
    end
  when Array
    array = hash
    number = 0
    array.each do 
      array[number] = convert_hash(array[number])
      number += 1
    end
    array
  else
    hash
  end
end

Я не знаю, почему я добавил «число» в качестве итератора.Каким-то образом hash.each не работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...