diff --git a/pythonetc/README.md b/pythonetc/README.md
index 9e49371..c599f74 100644
--- a/pythonetc/README.md
+++ b/pythonetc/README.md
@@ -96,6 +96,7 @@ More:
1. ./immutable.md
1. ./sqlite3.md
1. ./str-chain.md
+1. ./json-allow-nan.md
Out of order:
diff --git a/pythonetc/json-allow-nan.md b/pythonetc/json-allow-nan.md
new file mode 100644
index 0000000..097e15b
--- /dev/null
+++ b/pythonetc/json-allow-nan.md
@@ -0,0 +1,37 @@
+JSON states for "JavaScript Object Notation". It's a subset of JavaScript and representation of values is based on how they are represented in JavaScript:
+
+```python
+import json
+json.dumps(1) # '1'
+json.dumps(1.2) # '1.2'
+json.dumps('hi') # '"hi"'
+json.dumps({}) # '{}'
+json.dumps([]) # '[]'
+json.dumps(None) # 'null'
+json.dumps(float('inf')) # 'Infinity'
+json.dumps(float('nan')) # 'NaN'
+```
+
+The last two examples are valid JavaScript but explicitly forbidden by [RFC 4627](https://tools.ietf.org/html/rfc4627) "The application/json Media Type for JSON":
+
+> Numeric values that cannot be represented as sequences of digits (such as Infinity and NaN) are not permitted.
+
+And so, the `inf` / `nan` values, succesfully serialized in Python, can fail deserialization in another language. For example, in Go:
+
+```go
+import "encoding/json"
+
+func main() {
+ var v float64
+ err := json.Unmarshal(`Infinity`, &v)
+ println(err)
+ // Output: invalid character 'I' looking for beginning of value
+}
+```
+
+To prevent producing invalid JSON, pass `allow_nan=False` argument:
+
+```python
+json.dumps(float('nan'), allow_nan=False)
+# ValueError: Out of range float values are not JSON compliant
+```