Разбор JSON из PHP без 'json_decode' или PEAR 'Services_JSON' - PullRequest
5 голосов
/ 21 января 2011

Я работаю над проектом в школе для своего класса интеллектуального анализа данных и хочу использовать API-интерфейс stackoverflow для получения необработанных данных. Я просматривал небольшое вводное руководство по использованию PHP для доступа к нему, и первый пример кода не работал вообще. Виновником была функция json_decode. Версия PHP, установленная на школьном сервере, - 5.1.6, и функция существует только> = 5.2. Поиском здесь я узнал об использовании pear, но школьный PHP настроен на '--without-pear'

Каковы мои лучшие варианты для преодоления этих ограничений. Я бы предпочел не переключаться полностью на отдельный язык. Можно ли сделать вызов внешней функции на другом языке?

Оскорбительная строка была

$response = json_decode(http_inflate(file_get_contents($url)));

Ответы [ 3 ]

5 голосов
/ 21 января 2011

Вы можете установить библиотеки PEAR без использования процесса установки PEAR.Просто скачайте файл с веб-сайта PEAR ( Services_JSON ) и включите его вручную.

0 голосов
/ 23 февраля 2012

Я тоже был в ситуации, когда я хотел кодировать, используя JSON, но на сервере был только PHP v 5.1.6.После нескольких часов попыток я обнаружил, что все, что мне нужно было сделать, это просто включить JSON.php из моего сценария PHP и немного изменить мою функцию AJAX (изначально она была получена где-то из Интернета - не моя работа).

Вот оба файла, надеюсь, что это кого-то спасет.

java.js

var request;

function runAjax (JSONString, phpScript, cfunc) {
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                request = false;
            }
        }
    }
    request.onreadystatechange = cfunc;
    request.open("POST", phpScript);
    request.setRequestHeader("Content-type", "application/json", true);
    request.send(JSONString);
}

function smazVzor (id) {
    var JSONObject = new Object;
    JSONObject.id = id;
    JSONString = JSON.stringify(JSONObject);
    runAjax(JSONString, "./ajax/smaz_vzor.php", function () {
        if (request.readyState == 4) {
            var JSONObject = JSON.parse(request.responseText);
            alert(JSONObject.zprava);
            if (JSONObject.kod == 1) document.location.href = "./index.php";
        }
    });
}

smaz_vzor.php

<?php
    require("../../include/dbconnect.php"); // just some commands for MySQL
    require('../../include/JSON/JSON.php'); // <-- THIS IS IMPORTANT
    $json = new Services_JSON();    // create a new instance of Services_JSON class
    $str_json = file_get_contents('php://input');   // read fiel send by POST method as text
    $decoded = $json->decode($str_json);    // decode JSON string to PHP object

    $sql = "DELETE FROM Obory_vzory WHERE id = '$decoded->id'";
    $response = array();    // create response array
    if (!mysql_query($sql, $pripojeni)) {
        $response['kod'] = 0;
        $response['zprava'] = "Something got wrong.\nError: ".mysql_error();
    } else {
        $response['kod'] = 1;
        $response['zprava'] = "Operation successful.";
    }

    $encoded = $json->encode($response);    // encode array $json to JSON string
    die($encoded);  // send response back to java and end script execution
?>
0 голосов
/ 21 января 2011

Вы можете просто использовать поддержку JSON напрямую из PEAR, она не зависит от других библиотек PEAR. Я считаю, что все, что вам нужно, это JSON.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...