diff --git a/src/Core/Installer.php b/src/Core/Installer.php
index b84bcd916e..74d6114f16 100644
--- a/src/Core/Installer.php
+++ b/src/Core/Installer.php
@@ -440,6 +440,13 @@ class Installer
 		);
 		$returnVal = $returnVal ? $status : false;
 
+		$status = $this->checkFunction('json_encode',
+			L10n::t('JSON PHP module'),
+			L10n::t('Error: JSON PHP module required but not installed.'),
+			true
+		);
+		$returnVal = $returnVal ? $status : false;
+
 		return $returnVal;
 	}
 
diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php
index 32a80a77e0..3d7effe52b 100644
--- a/tests/src/Core/InstallerTest.php
+++ b/tests/src/Core/InstallerTest.php
@@ -43,6 +43,8 @@ class InstallerTest extends MockedTest
 		$this->mockL10nT('Error: iconv PHP module required but not installed.', 1);
 		$this->mockL10nT('POSIX PHP module', 1);
 		$this->mockL10nT('Error: POSIX PHP module required but not installed.', 1);
+		$this->mockL10nT('JSON PHP module', 1);
+		$this->mockL10nT('Error: JSON PHP module required but not installed.', 1);
 	}
 
 	private function assertCheckExist($position, $title, $help, $status, $required, $assertionArray)
@@ -177,6 +179,17 @@ class InstallerTest extends MockedTest
 			true,
 			$install->getChecks());
 
+		$this->mockFunctionL10TCalls();
+		$this->setFunctions(['json_encode' => false]);
+		$install = new Installer();
+		$this->assertFalse($install->checkFunctions());
+		$this->assertCheckExist(9,
+			'JSON PHP module',
+			'Error: JSON PHP module required but not installed.',
+			false,
+			true,
+			$install->getChecks());
+
 		$this->mockFunctionL10TCalls();
 		$this->setFunctions([
 			'curl_init' => true,
@@ -184,7 +197,8 @@ class InstallerTest extends MockedTest
 			'openssl_public_encrypt' => true,
 			'mb_strlen' => true,
 			'iconv_strlen' => true,
-			'posix_kill' => true
+			'posix_kill' => true,
+			'json_encode' => true
 		]);
 		$install = new Installer();
 		$this->assertTrue($install->checkFunctions());