@Phrogz die richtige Antwort hat. Das ist ein bisschen mehr Erklärung zu liefern, was passiert:
require 'json'
foo = {'a' => 1}
foo.to_json # => "{\"a\":1}"
Das ist, was ein JSON serialisiert Hash aussieht. Es ist eine Zeichenkette, die entkalkte Anführungszeichen enthält, die den Schlüssel umschließen, wobei :
das Schlüssel-Wert-Paar abgrenzt. JSON ist immer ein Array, "[...]"
, oder ein Hash, "{...}"
, und in jedem Fall ist es ein String. Das ist genau das, was Serialisierung macht und wie JSON funktioniert.
[foo.to_json] # => ["{\"a\":1}"]
[foo.to_json].class # => Array
Das ist ein Array, das einen serialisierten JSON-Hash enthält, was Sie tun. Sie können feststellen, dass es nicht korrekt serialisiert ist, da es sich um ein Array und nicht um einen String handelt. Die umgebende [...]
sind außerhalb die Zitate während in JSON sie innerhalb der Anführungszeichen sind:
[].to_json # => "[]"
{}.to_json # => "{}"
Moving on ...
[foo].to_json # => "[{\"a\":1}]"
[foo].to_json.class # => String
Das ist eine serialisierte Array von Hashes ist. In diesem Fall ist es ein einzelner Hash, aber es ist ausreichend für dieses Beispiel. Es ist ein String nach dem Serialisieren, den Sie erkennen können, weil das Array [...]
innerhalb der umgebenden Anführungszeichen ist.
Wenn Sie wirklich das Zeug verstehen wollen, sehr beide empfehle ich das Lesen der JSON home page, zusammen mit Rubys JSON, YAML und Psych Dokumentation. JSON is nearly a subset of YAML, so zu wissen YAML und wie Psych implementiert es ist wirklich hilfreich, wie Sie in die Arbeit mit JSON, YAML und dem Internet bewegen.
"Fer Instanz":
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'
bläst Kinda deinen Geist nicht?
Bitte lesen Sie "[mcve]". Was beinhaltet 'companies.json'? Haben Sie Ihren Code auf das Minimum reduziert, das das Problem aufzeigt? Oft wird diese Aufgabe das Problem aufdecken. –