2015-07-29 3 views
0

Я создал API, который кодирует данные из таблицы в массив, а затем в json.Почему json_encode не кодирует этот конкретный массив, а кодирует другие массивы с одинаковой структурой?

<?php 
header('Content-type: application/json'); 
header("Access-Control-Allow-Origin: *"); 

...(connection to db)... :p 

     $query = "SELECT * FROM gdb.".$_GET['tb']; 
     $result = mysqli_query($conn,$query); 



$posts =array(); 

while ($row = mysqli_fetch_assoc($result)) 
{ 

    $posts[] = array('ONE'=>$row); 




} 

$all = array('ALL'=>$posts); 
echo json_encode($all);//($posts); 
mysqli_close($conn); 
?> 

, кажется, работает хорошо с другими таблицами, но с этой конкретной таблицей, json_encode не кажется т работы ..

Это массив из таблицы не будет кодировать JSON:

array(1) { 
    ["ALL"]=> 
    array(61) { 
    [0]=> 
    array(1) { 
     ["ONE"]=> 
     array(12) { 
     ["id_product"]=> 
     string(1) "2" 
     ["id_shop"]=> 
     string(1) "1" 
     ["id_lang"]=> 
     string(1) "1" 
     ["description"]=> 
     string(72) "<p> BUY 5-KILOS RICE FREE SARDINES 155G.SAVE 10.00</p>" 
     ["description_short"]=> 
     string(0) "" 
     ["link_rewrite"]=> 
     string(20) "5-kilos-rice" 
     ["meta_description"]=> 
     string(0) "" 
     ["meta_keywords"]=> 
     string(0) "" 
     ["meta_title"]=> 
     string(0) "" 
     ["name"]=> 
     string(40) "5-KILOS RICE FREE SARDINES" 
     ["available_now"]=> 
     string(0) "" 
     ["available_later"]=> 
     string(0) "" 
     } 
    } 
    [1]=> 
    array(1) { 
     ["ONE"]=> 
     array(12) { 
     ["id_product"]=> 
     string(1) "3" 
     ["id_shop"]=> 
     string(1) "1" 
     ["id_lang"]=> 
     string(1) "1" 
     ["description"]=> 
     string(78) "<p>BUY 10-KILOS RICE FREE SARDINES RED 155G.SAVE 20.00</p>" 
     ["description_short"]=> 
     string(0) "" 
     ["link_rewrite"]=> 
     string(21) "10-kilos-rice" 
     ["meta_description"]=> 
     string(0) "" 
     ["meta_keywords"]=> 
     string(0) "" 
     ["meta_title"]=> 
     string(0) "" 
     ["name"]=> 
     string(41) "10-KILOS RICE FREE SARDINES" 
     ["available_now"]=> 
     string(0) "" 
     ["available_later"]=> 
     string(0) "" 
     } 
    } 
}} 

Массивы из тех, которые мой код мог кодировать в json, имеют одинаковую структуру. Просто различное количество полей и контента, поэтому я не знаю, почему с этим конкретным массивом это не сработает.

Я понял. Может быть, некоторые из описания строк (не включают в себя все в моей выборке) есть цитаты, doublequotes, слэш, и поэтому он не может кодировать JSon так я сделал это в то время цикла:

$posts[] = array('ONE'=>array_map("addslashes",$row)); 

вместо этого :

$posts[] = array('ONE'=>$row); 

, но он по-прежнему не кодирует json. Я неправильно использовал array_map ?? или есть еще одна причина, почему он не будет кодировать json?

+2

'json_encode' не похож на работу? Какой результат или исключение вы получаете? – Rvanlaak

+6

Вам не нужно будет вызывать 'addslashes()' - 'json_encode()' будет обрабатывать это. Вы проверили 'json_last_error()' или 'json_last_error_msg()', чтобы увидеть, была ли ошибка json? – Jim

+0

@Rvanlaak Я ожидаю что-то вроде {«ВСЕ»: [{«ОДИН»: {«id_product»: «2», «id_supplier»: «3», «id_manufacturer»: «0», «id_category_ ...» , который он сгенерировал, когда я использовал этот код в другой таблице: o –

ответ

1

мне просто нужно, чтобы добавить этот

mysqli_set_charset($conn,"utf8"); 

перед тем mysqli_select_db() после всего: B

Смежные вопросы