Index: src/wp-includes/functions.php
===================================================================
--- src/wp-includes/functions.php	(revision 25963)
+++ src/wp-includes/functions.php	(working copy)
@@ -4204,3 +4204,58 @@
 function reset_mbstring_encoding() {
 	mbstring_binary_safe_encoding( true );
 }
+
+/**
+ * A Json encoder which supports associative arrays as well as objects
+ */
+function wp_json_encode( $data ) {
+	wp_json_encode__add_object_prop( $data );
+	return json_encode( $data );
+}
+function wp_json_encode__add_object_prop( &$data ) {
+	if ( is_object( $data ) ) {
+		// Convert before adding prop to avoid modifying the original object
+		$data = (array) $data;
+		$data['_object'] = 1;
+	}
+	if ( is_array( $data ) )
+		array_walk( $data, 'wp_json_encode__add_object_prop' );
+}
+
+function wp_json_decode( $data ) {
+	$data = json_decode( $data, true );
+	wp_json_decode__convert_objects( $data );
+	return $data;
+}
+function wp_json_decode__convert_objects( &$data ) {
+	if ( ! is_array( $data ) )
+		return;
+
+	array_walk( $data, 'wp_json_decode__convert_objects' );
+
+	if ( ! isset( $data['_object'] ) && 1 === $data['_object'] ) {
+		unset( $data['_object'] );
+		$data = (object) $data;
+	}
+}
+
+function wp_json_test() {
+	$data = (object) array(
+		'objects' => array(
+			(object) array( 'object1' => 1 ),
+			(object) array( 'object2' => 2, 'props' => array( 1,2,3 ) )
+		),
+		'arrays' => array(
+			array(1,2,3,4)
+		),
+		'int' => 1,
+		'bool' => true,
+	);
+	
+	$encoded = wp_json_encode( $data );
+	$decoded = wp_json_decode( $encoded );
+	echo '<pre>';
+	print_r( $decoded == $data );
+	print_r( compact( 'encoded', 'decoded', 'data' ) );
+	echo '</pre>';
+}
\ No newline at end of file
