SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Проблем с Json encode и decode

borisov87

New member
Мисля да имплементирам json decode в joomla плъгин който да взема данни от тодалечено url. Преди това обаче реших да пробвам на чисто php с два елементарни файла
Този файл ми зарежда определени данни от таблицата и ги прави в json формат.
get_all_products.php
PHP:
        <?php
include 'functions.php'; 
/*
 * Following code will list all the products
 */
 
// array for JSON response
$response = array();
$api_key= 123456;
// connecting to db
db_init();
 $rs = run_q('SELECT *FROM api_key WHERE api_key='.$api_key.'') or die(mysql_error());
 if (!(mysql_num_rows($rs) > 0))
 {run_q('INSERT INTO api_key (api_key)
VALUES ('.$api_key.')') or die(mysql_error());}
else {
    

// get all products from products table
$rs = run_q('SELECT * FROM api_product ap INNER JOIN api_key ak ON (ap.api_key = ak.api_key) 
    INNER JOIN products p ON (ap.p_id = p.p_id) WHERE ap.api_key='.$api_key.'') or die(mysql_error());
// check for empty result
if (mysql_num_rows($rs) > 0) {
    // looping through all results
    // products node
    $response["products"] = array();
 
    while ($row = mysql_fetch_array($rs)) {
        // temp user array
        $product = array();
        $product["pid"] = $row["p_id"];
        $product["name"] = $row["p_name"];
        $product["desc"] = $row["p_desc"];
        $product["url"] = $row["p_url"];
 
        // push single product into final response array
        array_push($response["products"], $product);
    }
    // success
    $response["success"] = 1;
 
    // echoing JSON response
    echo json_encode($response);
} else {
    // no products found
    $response["success"] = 0;
    $response["message"] = "No products found for this api key";
 
    // echo no users JSON
    echo json_encode($response);
}

}
?>
        ?>

Получава се този примерен json
Код:
{"products":[{"pid":"1","name":"Ext1","desc":"ext1 desc","url":"www.server\/ext1.zip"},{"pid":"2","name":"Ext2","desc":"ext2 desc","url":"www.server\/ext2.zip"}],"success":1}

След това да речем за теста в index.php файла си слагам следния код
PHP:
        <?php
            session_start();
        include 'functions.php';
        myheader('Home');
$contents = file_get_contents('http://localhost/fewo_server/get_all_products.php');
$contents = utf8_encode($contents);
$results = json_decode($contents);
$er=json_last_error();
echo $er;
        footer();
        ?>
като дам dump на $result ми връща null. Сложих функцията json_last_error(); тя ми връща числото 4. Какъв е проблема? някакви идей? Благодаря предварително
 
За: Проблем с Json encode и decode

За: Проблем с Json encode и decode

Вместо

$results = json_decode($contents);

пробвай с

$results = json_decode($contents, true);

Може във файла, който генерира JSON (в твоя случай - get_all_products.php), най-отгоре да вмъкнеш:

header('Content-type: application/json; charset=utf-8');
 
Re: Проблем с Json encode и decode

Провах така както казваш не става, а това число 4 дето ми се връща от json_last_erorr гледам в описанието на функцията че би трябвало да е
JSON_ERROR_SYNTAX Syntax error
Но не виждам да има проблем със json низа, или поне като го копирам и го пусна в някой сайт за валидация ми дава че е ок
 
Re: Проблем с Json encode и decode

оправих го в моя код за проба преди

$api_key=870819;
има следния ред
$api_key= $_GET['api_key'];
и не го бях премахнал сега като сложих пред него две наклонени да го направя коментар се оправи е защо така се получава , аз така ли иначе след него си задавам стойност на апи кей $api_key=870819; и си получвам json, но само после при decode ми създава проблеми този ред койсто съм забравил да кометриам $api_key= $_GET['api_key'];
 
За: Проблем с Json encode и decode

За: Проблем с Json encode и decode

Защото когато го викаш с file_get_contents e гърмяло, че не съществува такъв GET параметър и така JSON-a не е бил правилен.
 

Горе