diff --git a/changelogs/appendices/newsfragments/1573.clarification b/changelogs/appendices/newsfragments/1573.clarification new file mode 100644 index 00000000..7210ae76 --- /dev/null +++ b/changelogs/appendices/newsfragments/1573.clarification @@ -0,0 +1 @@ +Clarify spec re canonical JSON to handle negative-zero; also, give an example of negative-zero and a large power of ten diff --git a/content/appendices.md b/content/appendices.md index 52940aa6..4592c428 100644 --- a/content/appendices.md +++ b/content/appendices.md @@ -90,7 +90,8 @@ To ensure that all implementations use the same JSON encoding we define We define this encoding for a value to be the shortest UTF-8 JSON encoding with dictionary keys lexicographically sorted by Unicode codepoint. Numbers in the JSON must be integers in the range -`[-(2**53)+1, (2**53)-1]`. +`[-(2**53)+1, (2**53)-1]`, represented without exponents or decimal +places, and negative zero `-0` MUST NOT appear. We pick UTF-8 as the encoding as it should be available to all platforms and JSON received from the network is likely to be already encoded using @@ -304,6 +305,21 @@ The following canonical JSON should be produced: {"a":null} ``` +Given the following JSON object: + +```json +{ + "a": -0, + "b": 1e10 +} +``` + +The following canonical JSON should be produced: + +```json +{"a":0,"b":10000000000} +``` + ### Signing Details JSON is signed by encoding the JSON object without `signatures` or keys