JSON Transform Tests
Appendix to: Parsing JSON is a Minefield
2016-10-17 22:00:00
Serialized | 1.0 | Double |
Freddy | 1.0 | Double |
MyJSON | 1.0 | NSNumber - double |
JSONSerialization | 1.0 | NSNumber - double |
JSONKit | 1.0 | NSNumber - double |
Lua JSON 20160728.17 | 1 | number |
Lua dkjson | 1 | number |
Ruby | 1.0 | Float |
Rust 1.12.0 / json 0.10.2 | 1.0 | Number |
Serialized | 1.000000000000000005 | Double |
Freddy | 1.0 | Double |
MyJSON | 1.0 | NSNumber - double |
JSONSerialization | 1.0 | NSNumber - double |
JSONKit | 1.0 | NSNumber - double |
Lua JSON 20160728.17 | 1 | number |
Lua dkjson | 1 | number |
Ruby | 1.0 | Float |
Rust 1.12.0 / json 0.10.2 | 1.000000000000000005 | Number |
Serialized | 1E-999 | Double |
Freddy | 1E-999 | String |
MyJSON | 0 | NSNumber - double |
JSONSerialization | Error | |
JSONKit | Error | |
Lua JSON 20160728.17 | 0 | number |
Lua dkjson | 0 | number |
Ruby | 0.0 | Float |
Rust 1.12.0 / json 0.10.2 | 1E-999 | Number |
Serialized | 1E6 | Double |
Freddy | 1000000.0 | Double |
MyJSON | 1000000 | NSNumber - double |
JSONSerialization | 1000000.0 | NSNumber - double |
JSONKit | 1000000.0 | NSNumber - double |
Lua JSON 20160728.17 | 1000000 | number |
Lua dkjson | 1000000 | number |
Ruby | 1000000.0 | Float |
Rust 1.12.0 / json 0.10.2 | 1E6 | Number |
Serialized | 1000000000000000 | Int |
Freddy | 1000000000000000 | Int |
MyJSON | 1000000000000000 | NSNumber - long long |
JSONSerialization | 1000000000000000 | NSNumber - long long |
JSONKit | 1000000000000000 | NSNumber - long long |
Lua JSON 20160728.17 | 1e+15 | number |
Lua dkjson | 1e+15 | number |
Ruby | 1000000000000000 | Fixnum |
Rust 1.12.0 / json 0.10.2 | 1000000000000000 | Number |
Serialized | 10000000000000000999 | Int |
Freddy | 10000000000000000999 | String |
MyJSON | 10000000000000000999 | String |
JSONSerialization | 10000000000000000999 | NSDecimalNumber - double |
JSONKit | 10000000000000000999 | unsigned long long |
cJSON | 10000000000000002048 | double |
Lua JSON 20160728.17 | 1e+19 | number |
Lua dkjson | 1e+19 | number |
Lua dkjson | 10000000000000000999 | Bignum |
Rust 1.12.0 / json 0.10.2 | 10000000000000000999 | Number |
Serialized | {"C3A9:"NFC","65CC81":"NFD"} | {"é":"NFC","é":"NFD"} |
Freddy | {"65CC81":"NFD"} | |
MyJSON | {"65CC81":"NFD"} | |
Swift JSONSerialization | {"65CC81":"NFD"} | |
Obj-C NSJSONSerialization | {"C3A9:"NFC","65CC81":"NFD"} | |
Obj-C SBJSON | {"C3A9:"NFC","65CC81":"NFD"} | |
JSONKit | {"C3A9:"NFC","65CC81":"NFD"} | |
C cJSON | {"C3A9:"NFC","65CC81":"NFD"} | |
Go | {"C3A9:"NFC","65CC81":"NFD"} | |
Python 3.5.2 | {"C3A9:"NFC","65CC81":"NFD"} | |
JavaScript | {"C3A9:"NFC","65CC81":"NFD"} | |
R rjson | {"C3A9:"NFC","65CC81":"NFD"} | |
R jsonlite | {"C3A9:"NFC","65CC81":"NFD"} | |
Lua JSON 20160728.17 | {"C3A9:"NFC","65CC81":"NFD"} | |
Lua dkjson | {"C3A9:"NFC","65CC81":"NFD"} | |
Ruby | {"C3A9:"NFC","65CC81":"NFD"} | |
Rust 1.12.0 / json 0.10.2 | {"C3A9:"NFC","65CC81":"NFD"} |
Serialized | {"65CC81":"NFD","C3A9:"NFC"} | {"é":"NFD","é":"NFC"} |
Freddy | {"C3A9":"NFC"} | |
MyJSON | {"C3A9":"NFC"} | |
Swift JSONSerialization | {"C3A9":"NFC"} | |
Obj-C NSJSONSerialization | {"C3A9:"NFC","65CC81":"NFD"} | |
Obj-C SBJSON | {"C3A9:"NFC","65CC81":"NFD"} | |
JSONKit | {"C3A9:"NFC","65CC81":"NFD"} | |
C cJSON | {"C3A9:"NFC","65CC81":"NFD"} | |
Go | {"65CC81":"NFD","C3A9:"NFC"} | |
Python 2 | {"65CC81":"NFD","C3A9:"NFC"} | |
Python 3 | {"C3A9:"NFC","65CC81":"NFD"} | |
JavaScript | {"65CC81":"NFD","C3A9:"NFC"} | |
R rjson | {"65CC81":"NFD","C3A9:"NFC"} | |
R jsonlite | {"65CC81":"NFD","C3A9:"NFC"} | |
Lua JSON 20160728.17 | {"C3A9:"NFC","65CC81":"NFD"} | |
Lua dkjson | {"C3A9:"NFC","65CC81":"NFD"} | |
Ruby | {"65CC81":"NFD","C3A9:"NFC"} | |
Rust 1.12.0 / json 0.10.2 | {"65CC81":"NFD","C3A9:"NFC"} |
Serialized | {"a":1,"a":2} | |
Freddy | {"a":2} | |
MyJSON | {"a":2} | |
Swift JSONSerialization | {"a":1} | |
Obj-C NSJSONSerialization | {"a":1} | |
Obj-C SBJSON | {"a":2} | |
JSONKit | {"a":2} | |
C cJSON | {"a":1,"a":2} | |
Go | {"a":2} | |
Python 2 | {"a":2} | |
Python 3 | {"a":2} | |
JavaScript | {"a":2} | |
R rjson | {"a":1,"a":2} | |
R jsonlite | {"a":1,"a":2} | |
Lua JSON 20160728.17 | {"a":1,"a":2} | |
Lua dkjson | {"a":2} | |
Ruby | {"a":2} | |
Rust 1.12.0 / json 0.10.2 | {"a":2} |
Serialized | {"a":1,"a":1} | |
Freddy | {"a":1} | |
MyJSON | {"a":1} | |
Swift JSONSerialization | {"a":1} | |
Obj-C NSJSONSerialization | {"a":1} | |
Obj-C SBJSON | {"a":1} | |
JSONKit | {"a":1} | |
C cJSON | {"a":1,"a":1} | |
Go | {"a":1} | |
Python 2 | {"a":1} | |
Python 3 | {"a":1} | |
JavaScript | {"a":1} | |
R rjson | {"a":1,"a":1} | |
R jsonlite | {"a":1,"a":1} | |
Lua JSON 20160728.17 | {"a":1,"a":1} | |
Lua dkjson | {"a":1} | |
Ruby | {"a":1} | |
Rust 1.12.0 / json 0.10.2 | {"a":1} |
Serialized | {"a":0,"a":-0} | |
Freddy | {"a":0} | |
MyJSON | {"a":0} | |
Swift JSONSerialization | ||
Obj-C NSJSONSerialization | {"a":0} | |
Obj-C SBJSON | {"a":0} | |
JSONKit | {"a":-0} | |
C cJSON | {"a":0, "a":0} | |
Go | {"a":-0} | |
Python 2 | {"a":0} | |
Python 3 | {"a":0} | |
JavaScript | {"a":-0} | |
R rjson | {"a":0, "a":0} | |
R jsonlite | {"a":0, "a":0} | |
Lua JSON 20160728.17 | {"a":-0} | |
Lua dkjson | {"a":-0} | |
Ruby | {"a":0} | |
Rust 1.12.0 / json 0.10.2 | {"a":0} |
Serialized | ["A\u0000B"] | |
Freddy | ["A"] | |
MyJSON | ["A00B"] | |
Swift JSONSerialization | ["A00B"] | |
Obj-C NSJSONSerialization | ["A00B"] | |
Obj-C SBJSON | ["A00B"] | |
JSONKit | nil | |
C cJSON | NULL | |
Go | ["A00B"] | |
Python 2 | ["A00B"] | |
Python 3 | ["A00B"] | |
JavaScript | ["A00B"] | |
Lua JSON 20160728.17 | ["A00B"] | |
Lua dkjson | ["A00B"] | |
Ruby | ["A00B"] | |
Rust 1.12.0 / json 0.10.2 | ["A00B"] |
Serialized | ["\uD800"] | |
Freddy | UnicodeEscapeInvalid(2) | |
MyJSON | ["EFBFBD"] | �, U+FFFD REPLACEMENT CHARACTER |
Swift JSONSerialization | Error Domain=NSCocoaErrorDomain, Code=3840, "Unexpected end of file during string parse (expected low-surrogate code point but did not find one)." | |
Obj-C NSJSONSerialization | Error Domain=NSCocoaErrorDomain, Code=3840, "Unexpected end of file during string parse (expected low-surrogate code point but did not find one)." | |
Obj-C SBJSON | WaitingForData - a partial document was found and more data is required to complete it | |
JSONKit | Error Domain=JKErrorDomain Code=-1 "Required a second \u Unicode escape sequence following a surrogate \u Unicode escape sequence." | |
C cJSON | NULL | |
Go | ["EFBFBD"] | �, U+FFFD REPLACEMENT CHARACTER |
Python 2 | ["\uD800"] | |
Python 3 | ["\uD800"] | |
JavaScript | ["EFBFBD"] | �, U+FFFD REPLACEMENT CHARACTER |
R rjson | ["EDA080"] | |
R jsonlite | ["?"] | |
Lua JSON 20160728.17 | ["?"] | |
Lua dkjson | ["EDA080"] | |
Ruby | nil | |
Rust 1.12.0 / json 0.10.2 | UnexpectedCharacter { ch: '\"', line: 1, column: 9 } |
Serialized | ["\uD800\uD800"] | |
Freddy | UnicodeEscapeInvalid(2) | |
MyJSON | ["EFBFBDEFBFBD"] | ["��"] |
Swift JSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Invalid surrogate pair in unicode escape sequence around character 10." | |
Obj-C NSJSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Invalid surrogate pair in unicode escape sequence around character 10." | |
Obj-C SBJSON | Error Domain=org.sbjson.parser Code=3 "Invalid low character in surrogate pair at index 14" | |
JSONKit | Error Domain=JKErrorDomain Code=-1 "Illegal \u Unicode escape sequence." | |
C cJSON | NULL | |
Go | ["EFBFBDEFBFBD"] | ["��"] |
Python 2 | ["\ud800\ud800"] | |
Python 3 | ["\ud800\ud800"] | |
JavaScript | ["EFBFBDEFBFBD"] | ["��"] |
R rjson | ["EDA080EDA080"] | |
R jsonlite | ["\U00010000"] | |
Lua JSON 20160728.17 | ["??"] | |
Lua dkjson | ["EDA080EDA080"] | |
Ruby | ["F0908080"] | ?? |
Rust 1.12.0 / json 0.10.2 | FailedUtf8Parsing |
Serialized | ["\uD800\uD800\uD800"] | |
Freddy | UnicodeEscapeInvalid(2) | |
MyJSON | ["EFBFBDEFBFBDEFBFBD"] | ["���"] |
Swift JSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Invalid surrogate pair in unicode escape sequence around character 10." | |
Obj-C NSJSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Invalid surrogate pair in unicode escape sequence around character 10." | |
Obj-C SBJSON | Error Domain=org.sbjson.parser Code=3 "Invalid low character in surrogate pair at index 14" | |
JSONKit | Error Domain=JKErrorDomain Code=-1 "Illegal \u Unicode escape sequence." | |
C cJSON | NULL | |
Go | ["EFBFBDEFBFBDEFBFBD"] | ["���"] |
Python 2 | ["\ud800\ud800\ud800"] | |
Python 3 | ["\ud800\ud800\ud800"] | |
JavaScript | ["EFBFBDEFBFBDEFBFBD"] | ["���"] |
R rjson | ["EDA080EDA080EDA080"] | |
R jsonlite | ["\U00010000?"] | |
Lua JSON 20160728.17 | ["???"] | |
Lua dkjson | ["EDA080EDA080EDA080"] | |
Ruby | nil | |
Rust 1.12.0 / json 0.10.2 | FailedUtf8Parsing |
Serialized | ["EDA080"] | |
Freddy | UnicodeEscapeInvalid(1) | |
MyJSON | cannotBuildStringFromData(5) | |
Swift JSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 1." | |
Obj-C NSJSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 1." | |
Obj-C SBJSON | CRASH | |
JSONKit | Error Domain=JKErrorDomain Code=-1 "Illegal UTF8 sequence found in "" string." | |
C cJSON | ["EDA080"] | |
Go | ["EFBFBDEFBFBDEFBFBD"] | ���, U+FFFD REPLACEMENT CHARACTER |
Python 2 | ["\ud800"] | |
Python 3 | UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 2: invalid continuation byt | |
JavaScript | ["EFBFBDEFBFBDEFBFBD"] | ���, U+FFFD REPLACEMENT CHARACTER |
R rjson | ["EDA080"] | |
R jsonlite | ["EDA080"] | |
Lua JSON 20160728.17 | ["EDA080"] | |
Lua dkjson | ["EDA080"] | |
Ruby | ["EDA080"] | |
Rust 1.12.0 / json 0.10.2 | InvalidData - stream did not contain valid UTF-8 |
Serialized | ["EDA080EDA080"] | |
Freddy | UnicodeEscapeInvalid(1) | |
MyJSON | cannotBuildStringFromData(8) | |
Swift JSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 1." | |
Obj-C NSJSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 1." | |
Obj-C SBJSON | ||
JSONKit | Error Domain=JKErrorDomain Code=-1 "Illegal UTF8 sequence found in "" string." | |
C cJSON | ["EDA080EDA080"] | |
Go | [������] | |
Python 2 | ["\ud800\ud800"] | |
Python 3 | UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 2: invalid continuation byte | |
JavaScript | ["������"] | |
R rjson | ["EDA080EDA080"] | |
R jsonlite | ["EDA080EDA080"] | |
Lua JSON 20160728.17 | ["EDA080EDA080"] | |
Lua dkjson | ["EDA080EDA080"] | |
Ruby | ["EDA080EDA080"] | |
Rust 1.12.0 / json 0.10.2 | InvalidData - stream did not contain valid UTF-8 |
Serialized | ["EDA080EDA080EDA080"] | |
Freddy | UnicodeEscapeInvalid(1) | |
MyJSON | cannotBuildStringFromData(11) | |
Swift JSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 1." | |
Obj-C NSJSONSerialization | Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 1." | |
Obj-C SBJSON | CRASH | |
JSONKit | Error Domain=JKErrorDomain Code=-1 "Illegal UTF8 sequence found in "" string." | |
C cJSON | ["EDA080EDA080EDA080"] | |
Go | ["���������"] | |
Python 2 | ["\ud800\ud800\ud800"] | |
Python 3 | UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 2: invalid continuation byte | |
JavaScript | ["���������"] | |
R rjson | ["EDA080EDA080EDA080"] | |
R jsonlite | ["EDA080EDA080EDA080"] | |
Lua JSON 20160728.17 | ["EDA080EDA080EDA080"] | |
Lua dkjson | ["EDA080EDA080EDA080"] | |
Ruby | ["EDA080EDA080EDA080"] | nil |
Rust 1.12.0 / json 0.10.2 | InvalidData - stream did not contain valid UTF-8 |