Хеш и массив: компромисс между производительностью и утилитой \ маневренностью - PullRequest
1 голос
/ 12 марта 2011

Я использую Ruby on Rails 3 и хотел бы правильно обрабатывать ответы веб-служб, находя компромисс между производительностью и утилитой \ маневренностью.

Я должен решить, какой тип ответа должен возвращать мой веб-сервисв приложение веб-клиента.Я использую JSON для передачи данных, и я бы знал, лучше ли использовать хэши (для этого мне нужно выполнить дополнительную работу) или массивы .

ДляНапример, у меня есть этот ответ:

[
  {
    "accounts" => {
      [
        "account" => {
          "id"   => 45, 
          "name" => "Test_name45", 
          "..."  => ..."
        }
        "account" => {
          "id"   => 60, 
          "name" => "Test_name60", 
          "..."  => ..."
        }
       ]
     }
   }, 
   {
     "other"  => {
       "sub_other" => {...}
     }
   }
]

Я хотел бы использовать что-то вроде (нет массива в «account», от «account» до «id»)

  {
    "accounts" => {
      "45" => { 
        "name" => "Test_name45", 
        "..."  => ..."
      }
      "60" => {
        "name" => "Test_name60", 
        "..."  => ..."
      }
   }, 
   {
     "other"  => {
       "sub_other" => {...}
     }
   }

, нопоследнее означает больше работы для веб-службы ...

Как это сделать?Любой совет?

1 Ответ

1 голос
/ 12 марта 2011

Я бы использовал любую структуру данных, которая имеет смысл.Если у вас есть список вещей , тогда используйте массив, где каждый элемент является вещью .Я бы, вероятно, упростил вашу структуру данных до чего-то вроде этого:

{
  "accounts": [
    {
      "id":   45, 
      "name": "Test_name45", 
      "...":  "..."
    },
    {
      "id":   60, 
      "name": "Test_name60", 
      "...":  "..."
    }
  ],
  "other": {
    "sub_other": {"...": "..."}
  }
}

Теперь accounts - это просто массив объектов - не нужно искать информацию по ключам.В Ruby это хорошо переводится:

ruby-1.9.2-p136 :001 > data = JSON.parse(json)
 => {"accounts"=>[{"id"=>45, "name"=>"Test_name45", "..."=>"..."}, {"id"=>60, "name"=>"Test_name60", "..."=>"..."}], "other"=>{"sub_other"=>{"..."=>"..."}}}
ruby-1.9.2-p136 :002 > data["accounts"].each { |acct| puts acct["name"] }
Test_name45
Test_name60
 => [{"id"=>45, "name"=>"Test_name45", "..."=>"..."}, {"id"=>60, "name"=>"Test_name60", "..."=>"..."}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...