Apalabrados Apalabrados - 6 months ago 9
JSON Question

Return JSON from PHP script

I know that there is many content from this kind of topic but it's quite strange what's happening in my case.

The fact is that this was working without problems and suddenly it does not return anything.

$data
and
$postsInCat
has the desired content but when echoed, the received response is empty.

Here is the code:

<?php
header('Content-Type: application/json');
include "wp-blog-header.php";
mb_internal_encoding("UTF-8");

$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$temp = $wp_query;
$wp_query= null;
$args = array(
'posts_per_page' => 20,
'post_type' => 'post',
'paged' => $paged,
'nopaging' => false,
'cat' => $_GET['author']
);
$wp_query = new WP_Query($args);

$data = array();
while ($wp_query->have_posts()) : $wp_query->the_post();
$obj = new stdClass;
$obj->id = $post->ID;
$obj->title = $post->post_title;
$obj->excerpt = substr(strip_tags($post->post_content), 0, 250).'...';
$obj->slug = str_replace('http://187.38.230.170/', '', get_permalink($post->ID));
$obj->author_name = get_user_by('id', $post->post_author)->user_login;
$obj->featured_image = wp_get_attachment_url( get_post_thumbnail_id($post->ID, 'post-thumbnails') );
$obj->date = new DateTime($post->post_date);
$obj->date = $obj->date->format("F d, Y");

array_push($data, $obj);
endwhile;

$postsInCat = get_term_by('id', $_GET['author'], 'category');
echo json_encode(array('data' => $data, 'n_resultados' => $postsInCat->count));
?>


If I print
$data
with
print_r
function, it prints the whole content.

Any idea what's happening?

Answer

Check the JSON Errors using json_last_error(). Possibly there's a character which cannot be put inside JSON. I encountered a same issue and I used this code:

<?php
    function utf8ize($d) {
        if (is_array($d)) {
            foreach ($d as $k => $v) {
                $d[$k] = utf8ize($v);
            }
        } else if (is_string ($d)) {
            return utf8_encode($d);
        }
        return $d;
    }
?>

You can make something like:

$array = utf8ize($array);