Ruby 由于不可见字符,无法分析JSON
我得到了一个错误与此代码:Ruby 由于不可见字符,无法分析JSON,ruby,json,Ruby,Json,我得到了一个错误与此代码: require 'net/http' require 'rubygems' require 'json' puts "test1:" url = "http://thomas.joulin.eu/a.json" resp = Net::HTTP.get_response(URI.parse(url)) data = resp.body result = JSON.parse(data) puts result puts "test2:" url = "http:/
require 'net/http'
require 'rubygems'
require 'json'
puts "test1:"
url = "http://thomas.joulin.eu/a.json"
resp = Net::HTTP.get_response(URI.parse(url))
data = resp.body
result = JSON.parse(data)
puts result
puts "test2:"
url = "http://thomas.joulin.eu/b.json"
resp = Net::HTTP.get_response(URI.parse(url))
data = resp.body
result = JSON.parse(data)
puts result
答复:
test1:
{"k"=>"v"}
test2:
(JSON::ParserError).0.0/gems/json-1.8.1/lib/json/common.rb:155:in `parse': 757: unexpected token at '{ "k": "v" }
'
from /Library/Ruby/Gems/2.0.0/gems/json-1.8.1/lib/json/common.rb:155:in `parse'
from test.rb:16:in `<main>'
cat-eb.json
{ "k": "v" }%
{ "k": "v" }^M$
问题不在于内容末尾的字符,而在于内容开头的字符:
[82] pry(main)> data
=> "\xEF\xBB\xBF{ \"k\": \"v\" }\r\n"
\xEF\xBB\xBF
这是UTF-8字节顺序掩码()
如果您确定i是纯ASCII,则可以执行以下操作:
JSON.parse data.encode("ASCII",{:undef=>:replace,:replace=>""})
=> {"k"=>"v"}
另一个选项是替换特定BOM表字符:
JSON.parse data.encode("UTF-8").gsub!("\xEF\xBB\xBF".force_encoding("UTF-8"), '')
=> {"k"=>"v"}
我希望使用诸如“é”或“ñ”之类的拉丁字符,所以我使用了您的第二个选项,效果很好:
data=resp.body.force_encoding(“UTF-8”)data.gsub!(“\xEF\xBB\xBF”。强制编码(“UTF-8”),”)
谢谢。这也解决了我的问题。