Как закодировать массив в формате JSON?

#php #javascript #json

#php #javascript #json

Вопрос:

У меня есть массив в JavaScript, который grossIncome .Этот массив содержит 6 элементов. Теперь я хочу отправить этот массив на другую страницу PHP, используя $.ajax метод, но как я могу закодировать этот массив в формате JSON?

Ответ №1:

Используйте JSON.stringify() (если вы хотите поддерживать старые браузеры, вы должны включить этот файл от Douglas Crockford):

 $.ajax(
{
  "url": "some_script.php",
  "data": {json: JSON.stringify(gossIncome)},
  "success": function()
  {
    // Do something! 
  }
});
  

В PHP-скрипте вы могли бы декодировать его с помощью json_decode :

 <?php

$json = isset($_GET['json']) ? $_GET['json'] : exit('No JSON passed!');

$array = json_decode($json);

if ( json_last_error() != JSON_ERROR_NONE )
  exit('JSON invalid!');

?>
  

Комментарии:

1. Не забудьте включить необходимый JS-файл — вы можете найти его по адресу github.com/douglascrockford/JSON-js

2. Спасибо отредактировано. Но на самом деле все современные браузеры поддерживают JSON.stringify() без каких-либо библиотек.

3. Лучше: data: {json: JSON.stringify(gossIncome)} .

Ответ №2:

попробуйте что-нибудь вроде json_encode();

http://phpjs.org/functions/json_encode:457

Ответ №3:

Это должно выполнить задание: http://www.openjs.com/scripts/data/json_encode.php

Если вы используете jQuery или другие фреймворки JS, посмотрите на тамошние репозитории плагинов, обычно у них есть класс JSON для де-/ кодирования массивов / объектов…

Ответ №4:

Технически массив уже находится в JSON , хотя для передачи через HTTP в файл вам потребуется сериализовать данные, чтобы сохранить значения пары имен в виде строки. К счастью, jQuery имеет встроенный param() метод. Вы могли бы использовать его следующим образом:

 $.ajax({
    url: 'path/to/file.php',
    type: 'POST',
    data: $.param(grossIncome),
    success: function(msg) {
        console.log(msg); // or whatever
    }
});
  

К сожалению, param() in полезен только для массивов в виде карт объектов … ie:

 var grossIncome = {
    valueOne: "123",
    valueTwo: "321"
};
  

Комментарии:

1. grossIncome похоже, что это массив, вы не можете вызвать serialize его.

2. Вау, я немного поработал с этим, и ты абсолютно прав. Я мог бы поклясться, что использовал serialize() для этой цели раньше, но, очевидно, я ошибаюсь. Спасибо за подсказку, и я изменил свой ответ.