Продвижение для обрезки и конечные пробелы в значениях JSON

Все,

Я выполняю запрос 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"
                }
            }
        }
    }
}
1
задан Charles 23 December 2012 в 22:26
поделиться

1 ответ

Обработайте данные ДО того, как они будут закодированы в формат 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 () , который сообщит, почему не удалось декодировать.

2
ответ дан 2 September 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: