2016-07-31 2 views
0

Если я определяю массив и кодировать его с json_encode()Как вернуть объект JavaScript из массива PHP?

$array = array("a" => "element1", "b" => "element2"); 
echo json_encode($array); 

Я получаю

{"a":"element1","b":"element2"} 

который является правильный JSON. Однако меня интересует следующий вывод:

{a:"element1",b:"element2"} 

Есть ли способ для достижения этой цели в PHP 5.2 или я должен реализовать это сам?

EDIT: поскольку люди начали спускать вниз и комментировать, что вывод, который я хочу, неверен. JSON, позвольте мне указать, что вопрос читает «объект JavaScript», а не «JSON». Система, с которой я работаю, требует формата, который я описал, к сожалению, я не могу это изменить.

+6

Почему? В JSON '{a:" element1 ", b:" element2 "}' недействителен. В JavaScript '{a:" element1 ", b:" element2 "}' равно тождественно ** ** на '{" a ":" element1 "," b ":" element2 "}'. – Quentin

+2

два синонима ... первый может быть проанализирован с использованием JSON.parse - второй не –

+0

'{a:" element1 ", b:" element2 "}' это недопустимый json для javascript. '{" a ":" element1 "," b ":" element2 "}' правильный json для javascript. используйте 'JSON.parse', если вы используете javascript или' $ .parseJSON' в jquery –

ответ

1

Ну, если вы НЕОБХОДИМО использовать недействительный формат, который вы указали, вам нужно будет написать свою собственную функцию, чтобы сделать это. Конечно, это действительно не рекомендуется, и вы должны попытаться улучшить JS-код для синтаксического анализа возвращаемой строки JSON, а не форсировать недопустимый вывод из PHP.

Вот простая функция, которая должна добиться того, что вы ищете (по крайней мере данный пример массив - вам нужно будет изменить его, если вы работаете с многомерным массивом):

function custom_json_encode($arr) 
{ 
    $len = count($arr); 
    $i = 1; 
    $json = '{'; 

    foreach($arr as $key => $val) 
    { 
     $json.= $key.':"'.$val.'"'; 
     $json.= ($i < $len) ? ',' : ''; 
     $i++; 
    } 

    $json.= '}'; 

    return $json; 
} 

Пример возврата:

{a:"element1",b:"element2"} 

Demo

+0

Пожалуйста, объясните ниже. – BenM

+0

Даунвит не мой, но я предполагаю, что они либо сердиты, потому что вы ответили на вопрос, который они считают концептуально неправильным (добро пожаловать в реальный мир, ребята) или потому, что ваш код не работает с многомерными массивами. Во всяком случае, не волнуйтесь о его изменении, я могу сделать это сам :) Вопрос в том, мог ли PHP или не мог уже делать то, что я описал. –

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