在demo.txt
档案中:
'{
"cars": {
"Nissan": [
{"model":"Sentra", "doors":4},
{"model":"Maxima", "doors":4}
]
}
}'
预期结果:
{
"cars" => {
"Nissan" => [
{
"model"=>"Sentra",
"doors"=>4
},
{
"model" => "Maxima",
"doors"=>4
}
]
}
}
我想阅读文件的全部内容并将其解析为JSON.parse(file_contents)
之类的JSON格式。请帮帮我。
我试过了:
file_contents = File.readlines 'demo.txt'
arr = []
file_contents.each do |d|
puts arr << d.gsub("\n","")
end
puts arr # ["'{", "\"cars\": {", "\"Nissan\": [", "{\"model\":\"Sentra\", \"doors\":4},", "{\"model\":\"Maxima\", \"doors\":4}", "]", "}", "}'"]
puts arr * '' #"'{\"cars\": {\"Nissan\": [{\"model\":\"Sentra\", \"doors\":4},{\"model\":\"Maxima\", \"doors\":4}]}}'"
答案 0 :(得分:3)
如果您可以使用gsub或其他内容删除前导和尾随'
,它就像
require 'JSON'
JSON.parse(File.open('demo.txt').read.chop!.reverse.chop!.reverse)
答案 1 :(得分:1)
该文件包含此字符串。
str =
"'{
\"cars\": {
\"Nissan\": [
{\"model\":\"Sentra\", \"doors\":4},
{\"model\":\"Maxima\", \"doors\":4}
]
}
}'"
#=> "'{\n \"cars\": {\n \"Nissan\": [\n {\"model\":\"Sentra\", \"doors\":4},\n {\"model\":\"Maxima\", \"doors\":4}\n ]\n }\n }'"
让我们创建文件。
FName = 'temp'
File.write(FName, str)
#=> 152
我们可以在删除单引号后对JSON进行解析。
require 'json'
JSON.parse(File.read(FName)[1..-2])
#=> {"cars"=>{"Nissan"=>[{"model"=>"Sentra", "doors"=>4},
# {"model"=>"Maxima", "doors"=>4}]}}
如果文件的最后一行以换行符结尾,则该文件为
str1 = str + "\n"
#=> "'{\n \"cars\": {\n \"Nissan\": [\n {\"model\":\"Sentra\", \"doors\":4},\n {\"model\":\"Maxima\", \"doors\":4}\n ]\n }\n }'\n"
File.write(FName, str1)
#=> 153
在这种情况下,我们需要在chomp
之前[1..-2]
。
JSON.parse(File.read(FName).chomp[1..-2])
#=> {"cars"=>{"Nissan"=>[{"model"=>"Sentra", "doors"=>4}, {"model"=>"Maxima", "doors"=>4}]}}
我们可以改为写
JSON.parse(File.read(FName)[1..-3])
但前者的优势在于无论文件是否以换行符结尾都能正常工作。