Ejemplo n.º 1
0
 /**
  * @group Core
  * @group DataTable
  * @group DataTable_Renderer
  * @group DataTable_Renderer_JSON
  */
 public function testJSONArrayIsMadeOfArrayTest3()
 {
     $dataTable = $this->_getDataTableArray_containsDataTableArray_simpleOneRow();
     $render = new Piwik_DataTable_Renderer_Json();
     $render->setTable($dataTable);
     $expected = '{"idSite":{"row1":14,"row2":15,"row3":[]}}';
     $rendered = $render->render();
     $this->assertEquals($expected, $rendered);
 }
Ejemplo n.º 2
0
	/**
	 * Render a multidimensional array to Json
	 * Handle Piwik_DataTable|Piwik_DataTable_Array elements in the first dimension only, following case does not work:
	 * array(
	 * 		array(
	 * 			Piwik_DataTable,
	 * 			2 => array(
	 * 				1,
	 * 				2
	 * 			),
	 *		),
	 *	);
	 *
	 * @static
	 * @param $array can contain scalar, arrays, Piwik_DataTable and Piwik_DataTable_Array
	 * @param int $level
	 * @return string
	 */
	public static function convertMultiDimensionalArrayToJson($array)
	{
		// Naive but works for our current use cases
		$arrayKeys = array_keys($array);
		$isAssociative = !is_numeric($arrayKeys[0]);

		if($isAssociative)
		{
			$json = "{";
		}
		else
		{
			$json = "[";
		}

		foreach ($array as $key=>$value)
		{
			if($isAssociative)
			{
				$json .= "\"".$key."\":";
			}

			switch(true)
			{
				// Case dimension is a PHP array
				case (is_array($value)):

					$json .= json_encode($value);
					break;

				// Case dimension is a Piwik_DataTable_Array or a Piwik_DataTable
				case ($value instanceof Piwik_DataTable_Array || $value instanceof Piwik_DataTable):

					$XMLRenderer = new Piwik_DataTable_Renderer_Json();
					$XMLRenderer->setTable($value);
					$renderedReport = $XMLRenderer->render();
					$json .= $renderedReport;
					break;

				// Case scalar
				default:

					$json .= json_encode($value);
					break;
			}

			$json .= ",";
		}

		// Remove trailing ","
		$json = substr ($json, 0, strlen($json) - 1);

		if($isAssociative)
		{
			$json .= "}";
		}
		else
		{
			$json .= "]";
		}
		return $json;
	}