THRIFT-3374 Ruby TJSONProtocol fails to unescape string values

This closes #640
diff --git a/lib/rb/lib/thrift/protocol/json_protocol.rb b/lib/rb/lib/thrift/protocol/json_protocol.rb
index 4d6186c..2b8ac15 100644
--- a/lib/rb/lib/thrift/protocol/json_protocol.rb
+++ b/lib/rb/lib/thrift/protocol/json_protocol.rb
@@ -514,7 +514,7 @@
       # The elements of this array must match up with the sequence of characters in
       # escape_chars
       escape_char_vals = [
-        '"', '\\', '/', '\b', '\f', '\n', '\r', '\t',
+        "\"", "\\", "\/", "\b", "\f", "\n", "\r", "\t",
       ]
 
       if !skipContext
diff --git a/lib/rb/spec/json_protocol_spec.rb b/lib/rb/spec/json_protocol_spec.rb
index 9fb6b7b..b6b46bf 100644
--- a/lib/rb/spec/json_protocol_spec.rb
+++ b/lib/rb/spec/json_protocol_spec.rb
@@ -293,15 +293,36 @@
     it "should read json escape char" do
       @trans.write('0054')
       @prot.read_json_escape_char.should == 'T'
+
+      @trans.write("\"\\\"\"")
+      @prot.read_json_string(false).should == "\""
+
+      @trans.write("\"\\\\\"")
+      @prot.read_json_string(false).should == "\\"
+
+      @trans.write("\"\\/\"")
+      @prot.read_json_string(false).should == "\/"
+
+      @trans.write("\"\\b\"")
+      @prot.read_json_string(false).should == "\b"
+
+      @trans.write("\"\\f\"")
+      @prot.read_json_string(false).should == "\f"
+
+      @trans.write("\"\\n\"")
+      @prot.read_json_string(false).should == "\n"
+
+      @trans.write("\"\\r\"")
+      @prot.read_json_string(false).should == "\r"
+
+      @trans.write("\"\\t\"")
+      @prot.read_json_string(false).should == "\t"
     end
 
     it "should read json string" do
       @trans.write("\"\\P")
       expect {@prot.read_json_string(false)}.to raise_error(Thrift::ProtocolException)
 
-      @trans.write("\"\\n\"")
-      @prot.read_json_string(false).should == "\\n"
-
       @trans.write("\"this is a test string\"")
       @prot.read_json_string.should == "this is a test string"
     end
diff --git a/test/rb/integration/TestClient.rb b/test/rb/integration/TestClient.rb
index d04f475..8fd6336 100755
--- a/test/rb/integration/TestClient.rb
+++ b/test/rb/integration/TestClient.rb
@@ -89,7 +89,16 @@
 
   def test_string
     p 'test_string'
-    assert_equal(@client.testString('string'), 'string')
+    test_string =
+      'quote: \" backslash:' +
+      ' forwardslash-escaped: \/ ' +
+      ' backspace: \b formfeed: \f newline: \n return: \r tab: ' +
+      ' now-all-of-them-together: "\\\/\b\n\r\t' +
+      ' now-a-bunch-of-junk: !@#$%&()(&%$#{}{}<><><' +
+      ' char-to-test-json-parsing: ]] \"]] \\" }}}{ [[[ '
+
+    result_string = @client.testString(test_string)
+    assert_equal(test_string, result_string.force_encoding(Encoding::UTF_8))
   end
 
   def test_bool