我正在用Ruby创建一个JSON文件。我需要在JSON文件中创建对象"companies“。
预期结果:
{"companies":[
{\"label\":\"Wayfair \",\"values\":[54]},
{\"label\":\"Move24 \",\"values\":[29]},
{\"label\":\"Auto1 \",\"values\":[23]},
...
]}我得到的是:
[
"{\"label\":\"Wayfair \",\"values\":[54,54]}",
"{\"label\":\"Move24 \",\"values\":[29,29]}",
"{\"label\":\"GetYourGuide \",\"values\":[28,28]}",
"{\"label\":\"Auto1.com \",\"values\":[20,20]}", ...
]我的代码:
data_hash = data_hash.map {|k,v| {label: k, values: v}}
companies_json = []
data_hash.each do |hash|
companies_json << hash.to_json
end
File.open('companies.json', 'w') do |f|
f << companies_json
end发布于 2016-10-17 00:35:21
问题的核心是您创建了一个JSON字符串数组,而不是一个数组,然后生成JSON。而不是:
companies_json = []
data_hash.each do |hash|
companies_json << hash.to_json
end执行以下操作:
companies = []
data_hash.each do |hash|
companies << hash
end
companies_json = companies.to_json发布于 2016-10-17 01:04:13
@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,以及Ruby的JSON,YAML和Psych文档。了解JSON is nearly a subset of YAML以及它是如何实现的,这对你开始使用JSON、YAML和互联网是非常有帮助的。
"Fer实例“:
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'有点让你大吃一惊,对吧?
https://stackoverflow.com/questions/40072448
复制相似问题