2013-04-20 2 views
2

Я некоторый исходный PHP код, простые ключ-значение массива, как эти:Разбор PHP Массивы в JavaScript

return array('var1' => 'var2'); 

И

return array('sub' => array('var1' => 'var2')); 

И мне нужно, чтобы разобрать их в объекты JavaScript, потому что у меня есть реализация PHP библиотеки PHP, и я хочу проверить совместимость с использованием исходных тестовых примеров.

Существует более 100 тестов, поэтому ручное преобразование нецелесообразно.

Есть ли простой способ преобразовать их в объекты JavaScript без использования PHP?

+1

Почему бы не использовать JSON? Почему без PHP? – elclanrs

+0

Json в порядке, но поскольку тестовая среда работает в приложении node.js, PHP не является хорошим вариантом. – mabs

ответ

2

Чтобы ответить на ваш вопрос - как разобрать ассоциативные массивы PHP на JSON без использования PHP - давайте использовать некоторый код JavaScript.

"array('sub' => array('var1' => 'var2'));".replace(/array\(/g, '{').replace(/\)/g, '}').replace(/=>/g, ':').replace(/;/g, '').replace(/'/g, '"'); 

Это предполагает, что вы просто так сидеть на какой-то исходный код и хотите, чтобы скопировать его в Node.js приложения, и что все данные выглядит точно так же, как это. Если данные происходят на нескольких строках, если вы даже хотите проанализировать «возврат»/«;», если некоторые данные содержат индексированные массивы или если какое-либо из значений содержит строку, которую я просто наивно разбираю, вам придется сделать этот скрипт более умным.

И, как говорили другие, если вы взаимодействуете с сервисом PHP, просто используйте json_encode().

+1

Спасибо, это намного проще, чем я думал. – mabs

0

Вы можете использовать json_encode() в PHP и JSON.parse() в JavaScript.

1

Если я вас правильно понял, вы должны использовать json_encode() так:

return json_encode(array('sub' => array('var1' => 'var2'))); 

возвращенное значение: {"sub":{"var1":"var2"}}

2

Это должно работать!

<?# somefile.php ?> 
<script type="text/javascript"> 
    var json = '<?= json_encode(array('sub' => array('var1' => 'var2'))) ?>'; 
    var object = JSON.parse(json); 
    console.log(object); 
</script> 

Выход

{ 
    sub: { 
    var1: "var2" 
    } 
} 

Чаще всего, вы увидите язык агностик API, который просто предоставляет ответы в формате JSON. Вы можете легко протестировать это, используя асинхронные запросы к API из JavaScript (в браузере, через Node.js и т. Д.);

+1

есть необходимость в 'JSON.parse'? что, если вы пишете 'var object = array ('var1' => 'var2')))?>;' вместо этого? – user2264587

+0

Объектные литералы не определены в JSON; они определены в [текстовом литерале синтаксиса JavaScript] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Object_literals). Они похожи, но они не то же самое. – naomik

+0

Я думал, что JSON был подмножеством синтаксиса литералов объектов, поэтому, если что-то действительно JSON, это будет действительный литерал? – user2264587

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