diff --git a/Foundation/CPValue.j b/Foundation/CPValue.j index bf7ce7c..f9181a6 100644 --- a/Foundation/CPValue.j +++ b/Foundation/CPValue.j @@ -112,6 +112,9 @@ var _JSONEncodedCharacters = new RegExp("[\\\"\\\\\\x00-\\x1f\\x7f-\\x9f]", 'g' function CPJSObjectCreateJSON(aJSObject) { + if (null === aJSObject) + return "null"; // if we don't do this, it will bomb in the aJSObject.valueof() method + // typeof new Number() and new String() gives you "object", // so valueof in those cases. var type = typeof aJSObject, diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j index 50b07d4..2968bc1 100644 --- a/Tests/Foundation/CPStringTest.j +++ b/Tests/Foundation/CPStringTest.j @@ -226,4 +226,16 @@ import [self assert:testStrings[i][1] equals:[testStrings[i][0] lastPathComponent]]; } +- (void) testCanSerializeJSONWithNulls +{ + [self assert:"null" equals:[CPString JSONFromObject: null ]]; + [self assert:null same:[[CPString JSONFromObject: null ] objectFromJSON]]; + [self assert:[null] equals:["[null]" objectFromJSON]]; + [self assert: [null] equals:[[CPString JSONFromObject: [null] ] objectFromJSON]]; + + [self assert:"{\"foo\":null}" equals:[CPString JSONFromObject: {foo:null} ]]; + var foo = [[CPString JSONFromObject: {foo:null} ] objectFromJSON]; + [self assertNull:foo.foo]; +} + @end