как получить данные на javascript из php с помощью JSON encode?

Я пытаюсь сопоставить трассировки с Google maps.

у меня есть массив в php с данными трассировки как

$c=ip,latitude,longitude, 2nd ip, its latitude, longitude, ....target ip, its lat, its lng

Я json_encode($c, JSON_FORCE_OBJECT) и сохранил файл

теперь, как получить доступ к этому с помощью javascript, напрямую приравняв его к новому объекту JS?

раньше у меня был такой формат данных на жестком диске

var data12 = {

"route":[
{
    "ip": "some ip",

    "longitude": "some lng",

    "latitude": "some lat",

.....

и в моем javascript он использовался как

data=data12.route;

а затем просто присоединяется к членам как данных[1].широта

7 ответов


я рекомендую использовать библиотека jQuery. Уменьшенная версия имеет размер только 31 КБ и предоставляет множество полезных функций.

для разбора JSON просто сделайте

var obj = jQuery.parseJSON ( ' {"name" : "John"} ' );

теперь вы можете легко получить доступ ко всему:

alert ( obj.name );

Примечание: jQuery использует собственный парсер JSON браузера-если он доступен - что очень быстро и намного безопаснее, чем использование eval () метод.

редактировать: получить данные от серверная сторона на стороне клиента, есть две возможности:

1.) Используйте запрос AJAX (довольно простой с jQuery):

   $.ajax ( {
       url: "yourscript.php",
       dataType: "json",
       success: function ( data, textStatus, jqXHR ) {
           // process the data, you only need the "data" argument
           // jQuery will automatically parse the JSON for you!
       }
   } );

2.) Запишите объект JSON в исходный код Javascript при генерации страницы:

   <?php
       $json = json_encode ( $your_array, JSON_FORCE_OBJECT );
   ?>

   <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

   <script type="text/javascript">
   //<![CDATA[

   var json_obj = jQuery.parseJSON ( ' + <?php echo $json; ?> + ' );

   //]]>
   </script>

Я мог бы получить массив JSON, используя json_encode () PHP из бэкэнда, как в этом примере:

<!doctype html>
<html>
    <script type="text/javascript">
        var json = <?php echo json_encode(array(1 => '123', 'abc' => 'abd', 2 => 5));?>;
        console.log(json[1]);
        console.log(json.abc);
    </script>        
</html>

отсутствие кавычек означает eval () того, что было распечатано. Это быстрый хак, который мы часто использовали, чтобы быстро добавить начальные значения на нашу страницу AJAX.


Я знаю, что это старый, но недавно я обнаружил, что ищу это. Ни один из ответов здесь не работал для моего случая, потому что в моих ценностях были цитаты. Идея здесь заключается в том, чтобы base64 кодировал массив перед эхом на страницу. Таким образом, цитаты не конфликтуют.

< ?php
$names = ['first' => "some'name"];
?>
var names = JSON.parse(atob('< ?php echo base64_encode(json_encode($names)); ?>'));
console.log(names['first']);

нет необходимости в jquery, просто:

    var array= <?php echo json_encode($array); ?>;
    console.log(array->foo);

мы должны отобразить формат кодирования json в javascript, используя ниже один:

var responseNew = JSON.parse(' {"name" : "John"} ' );
alert(responseNew['name']);

эта функция работает для вас, мне кажется:

    function json_encode4js($data) {
    $result = '{';
    $separator = '';
    $count = 0;
    foreach ($data as $key => $val) {

        $result .= $separator . $key . ':';
        if (is_array($val)){
            $result .= json_encode4js($val).(!$separator && count($data) != $count ? ",":"");
            continue;
        }
        if (is_int($val)) {
            $result .= $val;
        } elseif (is_string($val)) {
            $result .= '"' . str_replace('"', '\"', $val) . '"';
        } elseif (is_bool($val)) {
            $result .= $val ? 'true' : 'false';
        } elseif (is_null($val)) {
            $result .= 'null';
        } else {
            $result .= $val;
        }

        $separator = ', ';
        $count++;
    }

    $result .= '}';

    return $result;
}

$a = array(
"string"=>'text',
'jsobj'=>[
    "string"=>'text',
    'jsobj'=>'text2',
    "bool"=>false
    ],
"bool"=>false);

var_dump( json_encode4js($a) ); //output: string(77) "{string:"text", jsobj:{string:"text", jsobj:"text2", bool:false}, bool:false}" 

var_dump( json_encode($a));//output: string(85) "{"string":"text","jsobj":{"string":"text","jsobj":"text2","bool":false},"bool":false}"

просто eval() данные в Javascript.