Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123

Корректное формирование JSON

27.03.2014, 22:06. Показов 3496. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Проблема такая:
На данный момент есть клиент на ActionScript 3 и сервер на PHP. Отправляю запросы на сервер, при возникновении события во flash, таким образом:

ActionScript 3
1
2
3
4
5
6
private function buy(e:Event):void {
            var product:String = e.type;    // тип объекта для покупки
            vars['do'] = "buy";
            vars['product'] = product;
            createLoader(vars, onCompleteBuy);
        }
Затем получаю данные вот так:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
private function onCompleteBuy(e:Event):void {
            var output:Object = com.adobe.serialization.json.JSON.decode(e.target.data);
 
            if (output.pay == "ok") {
                //trace("ПОКУПКА СОВЕРШЕНА");
            } else if (output.pay == "no"){
                //trace("НЕ ХВАТАЕТ ДЕНЕГ");
                loader.removeEventListener(Event.COMPLETE, onCompleteBuy);
                return;
            }
            loader.removeEventListener(Event.COMPLETE, onCompleteBuy);
        }
На сервере данные отправляются клиенту так:
PHP
1
echo json_encode(array("pay" => $pay));
Всё работает, когда передаётся одна строчка в echo, как в предыдущем коде.

Но есть случаи, когда нужно передать несколько массивов с данными за один раз из разных частей скрипта (при выполнении разных условий). То есть, например, несколько строчек из разных функций:

PHP
1
echo json_encode(array("param" => $param, "param2" => $param2));
При попытке сделать это выскакивает ошибка:
JSONParseError: Unexpected characters left in input stream

Раньше передавал строки так:
PHP
1
echo "pay=".$pay."&pay2=".$pay2;
PHP
1
echo "&pay3=".$pay3."&pay4=".$pay4;
Но потом отказался, в пользу JSON.

Я так понимаю JSON не может отправить несколько array в одном echo... Подскажите пожалуйста, как грамотно написать код, в котором можно будет передать данные через echo, используя JSON, из разных частей скрипта?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2014, 22:06
Ответы с готовыми решениями:

Формирование json-файла
Здравствуйте! Нужно сформировать файл такого типа: {"Topic":} Пока что получается что-то такое: ...

Формирование json из базы данных
Выполняю запрос в базу данных $sql = $this->db->prepare("select name, email from mybase"); $sql->execute(); В итоге получаю...

Формирование json объекта на основании строки в переменной $_GET
С помощью jquery отправляю запрос серверному скрипту, передавая туда строку вида (пример упрощен) {"obj":"value"} ...

13
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
27.03.2014, 22:59
В каком формате вы хотите получать данные? И в каком получаете?

Не по теме:

Есть подозрение, что ваша проблема относится не к флешу, а к серверу

0
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123
27.03.2014, 23:06  [ТС]
Получаю данные в формате JSON, так, как и требуется.

Вида:
{"weight":"659","weightUp":"true"}{"maxC alories":120,"normalCalories":60}
Но флэш получает их как несколько массивов. Нужно же каким-то образом отправить с сервера их в одном массиве...

Видимо ошибся веткой форума, да...
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
27.03.2014, 23:14
dendead, так у вас данная строка! и не является JSON-ом, не соответствует формату. Предполагаю, что у вас 2 объекта (по 2 свойства в каждом), но они должны быть разделены запятыми и у каждого должно быть название, если они не часть массива (который оформляется квадратными скобками "[]", а не фигурными "{}")

Добавлено через 1 минуту
Вот пример, как бы это могло выглядеть.
{
"object1": {
"weight": "659",
"weightUp": "true"
},
"object2": {
"maxCalories": 120,
"normal Calories": 60
}
}
0
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123
27.03.2014, 23:19  [ТС]
У меня есть несколько php функций на сервере.
Одна из которых возвращает клиенту:
PHP
1
echo json_encode(array("weight" => $weight, "weightUp" => $weight_up));
А другая:
PHP
1
echo json_encode(array("maxCalories" => $max_calories, "normalCalories" => $normal_calories));
Если срабатывает только одна из этих функций, то flash реагирует на ответ сервера корректно. Приходит строка вида:
ActionScript 3
1
{"weight":"659","weightUp":"true"}
Но если срабатывают обе функции, во флэш приходит два ответа (каждый из которых содержит массив):
ActionScript 3
1
{"weight":"659","weightUp":"true"}{"maxCalories":120,"normal Calories":60}
И flash начинает ругаться JSONParseError: Unexpected characters left in input stream.

Потому что в этом случае JSON имеет неправильный формат.

А как можно отправить данные объектом, а не массивом?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
27.03.2014, 23:22
Тема из флеша переезжает в php т.к. проблема не со считыванием json-а, а с его корректным формированием на сервере.
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
27.03.2014, 23:32
Цитата Сообщение от dendead Посмотреть сообщение
Потому что в этом случае JSON имеет неправильный формат.
А как можно отправить данные объектом, а не массивом?
какая разница. результат будет тот же. нельзя склеить две строки json в одну и получить корректный формат..
0
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123
27.03.2014, 23:42  [ТС]
ads, а как можно поступить в таком случае?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
27.03.2014, 23:43
Цитата Сообщение от dendead Посмотреть сообщение
{"weight":"659","weightUp":"true"}{"maxC alories":120,"normal Calories":60}
Если я правильно понимаю, то это не является JSON.
сначала запихните все в одну переменую-массив, потом над ней делайте json_encode, а не склеивайте сами.
0
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123
28.03.2014, 00:09  [ТС]
Я создал глобальный массив $global_array и обращаюсь к нему:
PHP
1
global $global_array
в созданных функциях. Подскажите пожалуйста, как лучше всего заносить в него данные из других массивов?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
28.03.2014, 00:37
Цитата Сообщение от dendead Посмотреть сообщение
Я создал глобальный массив $global_array и обращаюсь к нему:
фуу
а по теме:
PHP
1
2
3
4
5
$global_array[]=$massiv1;
///-----
$global_array[]=$massiv2;
//----
echo json_encode($global_array);
0
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123
28.03.2014, 01:07  [ТС]
Совсем недавно в php. Для меня это дремучий лес... А как можно более грамотно решить эту задачу?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
28.03.2014, 01:12
Цитата Сообщение от dendead Посмотреть сообщение
А как можно более грамотно решить эту задачу?
перейти на ооп.. но если "дремучий лес" и программа небольшая - оставьте как есть
0
3 / 3 / 3
Регистрация: 24.01.2014
Сообщений: 123
28.03.2014, 01:27  [ТС]
На AS3 вовсю на ООП пишу. Про ООП на PHP пока что читаю Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования - 2011. Не буду больше позориться. Большое спасибо за советы. Более менее разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2014, 01:27
Помогаю со студенческими работами здесь

PHP json_decode (json или не json)
Третий день ломаю голову над вопросом: API вконтакте возвращает массив в json (как я полагаю) - вроде похоже на json Вот строка: ...

Формирование json
В Mule проекте есть класс, возвращающий ответ в json. Вот так формирую json на основе запроса: JSONArray array = new JSONArray(); ...

Формирование JSON массива
Здравствуйте! В компоненте ListView есть 2 столбца и n количество строк в которых хранятся данные. Мне нужно эти данные сформировать в JSON...

Формирование JSON-объекта
Привет всем! Подскажите, как можно сформировать JSON из строки, если в значении ключа есть кавычки? Попробовал уже 2 парсера - оба...

Формирование Json для fullcalendar из БД
Есть страница с календарем (fullcalendar). Пытаюсь события вытянуть из бд и прилепить к календарю, но не выходит как-то... Скрипт на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru