Обрезать начальные и конечные пробелы в значениях JSON - PullRequest
1 голос
/ 03 августа 2010

Все,

Я делаю 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 Ответ

2 голосов
/ 03 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...