diff --git a/Sources/XXClient/Models/Fact.swift b/Sources/XXClient/Models/Fact.swift
index 99db6a2a9cd65262fba3b0ce82f3565136c9b356..2ee8a6b3a87720869aafc10e4c746ebcc2565c55 100644
--- a/Sources/XXClient/Models/Fact.swift
+++ b/Sources/XXClient/Models/Fact.swift
@@ -30,10 +30,16 @@ extension Fact: Codable {
 
 extension Array where Element == Fact {
   public static func decode(_ data: Data) throws -> Self {
-    try JSONDecoder().decode(Self.self, from: data)
+    if let string = String(data: data, encoding: .utf8), string == "null" {
+      return []
+    }
+    return try JSONDecoder().decode(Self.self, from: data)
   }
 
   public func encode() throws -> Data {
-    try JSONEncoder().encode(self)
+    if isEmpty {
+      return "null".data(using: .utf8)!
+    }
+    return try JSONEncoder().encode(self)
   }
 }
diff --git a/Tests/XXClientTests/Models/FactTests.swift b/Tests/XXClientTests/Models/FactTests.swift
index 2ba1da9ac9da82e174cee504e8708bb6794e9a81..c844af66f73b6e4686e51436f49d8a28a1c79568 100644
--- a/Tests/XXClientTests/Models/FactTests.swift
+++ b/Tests/XXClientTests/Models/FactTests.swift
@@ -38,4 +38,17 @@ final class FactTests: XCTestCase {
 
     XCTAssertNoDifference(models, decodedModels)
   }
+
+  func testCodingEmptyArray() throws {
+    let jsonString = "null"
+    let jsonData = jsonString.data(using: .utf8)!
+
+    let decodedModels = try [Fact].decode(jsonData)
+
+    XCTAssertNoDifference(decodedModels, [])
+
+    let encodedModels = try decodedModels.encode()
+
+    XCTAssertNoDifference(encodedModels, jsonData)
+  }
 }