@Phrogz имеет правильный ответ. Это должно дать немного больше объяснений тому, что происходит:
require 'json'
foo = {'a' => 1}
foo.to_json # => "{\"a\":1}"
Это то, что похоже на сериализованный хэш JSON. Это строка, содержащая экранированные кавычки, обертывающие ключ, с :
, ограничивающим пару ключей и значений. JSON всегда является массивом, "[...]"
или хешем, "{...}"
, и в любом случае это строка. Это то, что делает сериализация и как работает JSON.
[foo.to_json] # => ["{\"a\":1}"]
[foo.to_json].class # => Array
Это массив, содержащий сериализованный хеш-код JSON, который вы делаете. Вы можете сказать, что оно не сериализовано правильно, потому что это массив, а не строка. Окружающий [...]
является вне кавычки, тогда как в JSON они внутри кавычек:
[].to_json # => "[]"
{}.to_json # => "{}"
Переходит ...
[foo].to_json # => "[{\"a\":1}]"
[foo].to_json.class # => String
Это сериализованная массив хэш. В этом случае это единственный хеш, но этого достаточно для этого примера. Это строка после сериализации, которую вы можете сказать, потому что массив [...]
внутри окружающих цитат.
Если вы действительно хотите понять этот материал, я настоятельно рекомендую прочитать как JSON home page, наряду с JSON, YAML и Psych документации Руби. JSON is nearly a subset of YAML, поэтому знание YAML и того, как Psych реализует, это действительно полезно при работе с JSON, YAML и интернетом.
"Фер экземпляр":
json_hash = '{"a":1}'
yaml_hash = "---\na: 1"
require 'yaml'
YAML.load(json_hash) # => {"a"=>1}
YAML.load(yaml_hash) # => {"a"=>1}
Psych.load(json_hash) # => {"a"=>1}
Psych.load(yaml_hash) # => {"a"=>1}
require 'json'
JSON[json_hash] # => {"a"=>1}
JSON[yaml_hash] # => JSON::ParserError: 743: unexpected token at '---\na: 1'
Любопытное взрывает ваш разум не так ли?
Пожалуйста, прочтите «[mcve]». Что содержит 'company.json'? Вы сократили свой код до минимума, который демонстрирует проблему? Часто эта задача покажет проблему. –