Все,
Я выполняю запрос JSON к веб-серверу с помощью PHP, и он возвращает меня ответ JSON в переменной. Ответ JSON будет иметь много ключей и значений. Я хотел бы функцию, которая обрезает продвижение и конечные пробелы в каждом "значении" пары "ключ-значение" для всего ответа JSON.
Как я могу сделать это через PHP?
Исключая: json_decode повреждается из-за конечных пробелов или специальных символов:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language‡flfi·€.. ",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "create markup languages such as DocBook. ",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
Обработайте данные ДО того, как они будут закодированы в формат JSON. Лучше очистить источник, чем возиться с версией JSON и, возможно, нарушить синтаксис искаженным регулярным выражением, удалив то, чего не должно быть.
В основном, сделайте следующее:
foreach($data as $key => $value) {
$data[$key] = trim($value);
}
$json = json_encode($data); // $json's values are now pre/post-whitespace free
(при условии, что это простой одномерный массив).
продолжение редактирования / комментария:
Получает ли ваш PHP-скрипт этот внешний JSON? В этом случае вы можете тривиально декодировать JSON в объект / массив PHP, выполнить обрезку пробелов и перекодировать в JSON:
$json = get_json_from_external_source();
$data = json_decode($json);
, а затем в цикл foreach (или array_map, как указано в комментарии Томалака), как и раньше. . Если вы ограничены выполнением этой клиентской части в Javascript, вы можете выполнить аналогичную обработку там, прежде чем передавать данные любой функции, которая этого требует.
отредактировать / прокомментировать продолжение # 2:
Я очень сомневаюсь, что это конечные пробелы внутри значений данных JSON. JSON отлично справляется с обработкой пробелов, где бы они ни встречались в строке, и не заботится о том, сколько (или мало) их. Скорее всего, это забавные символы в записи GlossTerm
.
Если вы используете PHP 5.3 (или более позднюю бета-версию), есть json_last_error ()
, который сообщит, почему не удалось декодировать.