From 1ada59377dafbe00f86944ef42734ecd1fa4b8c2 Mon Sep 17 00:00:00 2001 From: David Charbonnier Date: Wed, 15 Apr 2015 13:10:02 -0700 Subject: [PATCH] fix stringify escaping double quote --- src/JSValue.swift | 3 ++- tests/JSValueTests.Usage.swift | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/JSValue.swift b/src/JSValue.swift index 77d2fe2..f79e5a6 100644 --- a/src/JSValue.swift +++ b/src/JSValue.swift @@ -245,7 +245,8 @@ extension JSValue { return "\(number)" case .JSString(let string): - return "\"\(string)\"" + let escaped = Array(string).reduce("") { $1 == "\"" ? "\($0)\\\($1)" : "\($0)\($1)" } + return "\"\(escaped)\"" case .JSArray(let array): return "[\(newline)" + join(",\(newline)", array.map({ "\(nextIndent)\($0.prettyPrint(indent, level + 1))" })) + "\(newline)\(currentIndent)]" diff --git a/tests/JSValueTests.Usage.swift b/tests/JSValueTests.Usage.swift index 1140a9d..5211167 100644 --- a/tests/JSValueTests.Usage.swift +++ b/tests/JSValueTests.Usage.swift @@ -216,6 +216,15 @@ class JSValueUsageTests : XCTestCase { // let expected = "{\"id\":73.0,\"password\":true,\"name\":\"Bloxus test\",\"url\":\"http://remote.bloxus.com/\"}" // XCTAssertEqual(str, expected) // } + func testStringifyEscaping() { + var json: JSON = [ + "url" : "should escape double quotes \"" + ] + + let str = json.stringify(0) + let expected = "{\"url\":\"should escape double quotes \\\"\"}" + XCTAssertEqual(str, expected) + } } // MARK: Test Helpers