Объекты Ruby Hash и JSON-объекты могут показаться внешне похожими, но есть важные различия.
Внутренний хэш Ruby выглядит следующим образом, когда выражается с помощью inspect
:
{"token"=>"<my token>", "dc"=>"test-dc"}
Принимая во внимание, что JSON, который является не зависящим от языка форматом данных, вдохновленным JavaScript, выглядит следующим образом:
{"token": "<my token>", "dc": "test-dc"}
Внешне они похожи, но важное отличие состоит в том, что если у вас есть первый, не как строка, а как Hash
, вы можете просто использовать его:
hash["token"]
Если у вас есть последнее, вам нужно будет проанализировать его с чем-то вроде JSON.load
:
JSON.load('{"token": "<my token>", "dc": "test-dc"}')["token"]
Конечно, если выЕсли у вас есть Ruby и вам нужен JSON, вы всегда можете вывести его:
JSON.dump({"token"=>"<my token>", "dc"=>"test-dc"})
# => "{\"token\":\"<my token>\",\"dc\":\"test-dc\"}
Обратите внимание, что аргументы dump
- это действительный код Ruby, а не строка, как в предыдущем примере.Выходными данными является строка, и поэтому двойные кавычки должны быть экранированы обратной косой чертой.Если вы на самом деле print
это увидите, вы увидите это без дополнительного экранирования, и это выглядит нормально, это всего лишь артефакт того, как Ruby представляет строки, используя inspect
.