Nic*_*las 2 ruby json escaping
我有AA JSON编码数组看起来像这样(注:这是一个文件,一个字符串的不是内容)["Company\\","NN","Company\\"].这是无效的JSON吗?它包含一个转义\字符,看起来对我来说.然而:
a = '["Company\\","NN","Company\\"]'
=> "[\"Company\\\",\"NN\",\"Company\\\"]"
JSON.parse a
JSON::ParserError: 387: unexpected token at 'NN","Company\"]'
from /Users/nneubauer/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/json/common.rb:148:in `parse'
from /Users/nneubauer/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/json/common.rb:148:in `parse'
from (irb):11
from /Users/nneubauer/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)
有趣的是:
puts a
["Company\","NN","Company\"]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我认为从文件中读取字节序列并将其放在Ruby代码中是有区别的.
当您'在Ruby代码中用作字符串分隔符时,它仍然会将其解释\\为转义序列.所以你得到一个值为的字符串["Company\","NN","Company\"].
然后JSON解析器获取它.它看到了开始[,然后查找一个字符串.它将\"序列解释为转义,因此它看到的第一个字符串的值为Company\",.它然后期望看到一个逗号 - 但看到NN并抛出:
1.9.3-p194 :009 > a = '["Company\\","NN","Company\\"]'
=> "[\"Company\\\",\"NN\",\"Company\\\"]"
1.9.3-p194 :010 > puts a
["Company\","NN","Company\"]
=> nil
1.9.3-p194 :011 > JSON.parse(a)
JSON::ParserError: 387: unexpected token at 'NN","Company\"]'
Run Code Online (Sandbox Code Playgroud)
但是,如果我从文件中读取该字节序列gets,那么该值最终会成为["Company\\","NN","Company\\"].这可以解析为JSON - \\由JSON解释,然后它会"正确地看到并关闭数组中的第一个字符串.
1.9.3-p194 :012 > b = gets
["Company\\","NN","Company\\"]
=> "[\"Company\\\\\",\"NN\",\"Company\\\\\"]\n"
1.9.3-p194 :013 > puts b
["Company\\","NN","Company\\"]
=> nil
1.9.3-p194 :014 > JSON.parse b
=> ["Company\\", "NN", "Company\\"]
1.9.3-p194 :015 > JSON.parse(b).length
=> 3
Run Code Online (Sandbox Code Playgroud)
那么,你做错了什么?从数据文件切割和粘贴到源代码中.:)