Cortar os espaços em branco principais e à direita nos valores JSON

Todos,

Eu faço uma solicitação JSON para um servidor web usando PHP e retorna uma resposta JSON em uma variável. A resposta JSON terá muitas chaves e valores. Gostaria de uma function que garanta os espaços em branco que conduzem e seguem em cada “valor” do par chave-valor para toda a resposta JSON.

Como posso fazer isso através do PHP?

Ex: json_decode quebra devido a espaços à direita ou caracteres especiais:

{ "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" } } } } } 

Processe os dados ANTES de ser codificado no formato JSON. É melhor limpar a fonte do que mexer com a versão JSON e possivelmente quebrar a syntax com uma regex mal formada eliminando algo que não deveria ter.

Basicamente, faça isso:

 foreach($data as $key => $value) { $data[$key] = trim($value); } $json = json_encode($data); // $json's values are now pre/post-whitespace free 

(supondo que seja uma matriz simples de 1-dimensional).

editar / comentar followup:

O seu script PHP está procurando este JSON externo? Se for esse o caso, você pode decodificar trivialmente o JSON em um object / matriz do PHP, fazer o corte do espaço em branco e encaminhá-lo novamente para o JSON:

 $json = get_json_from_external_source(); $data = json_decode($json); 

e então o loop foreach (ou array_map como mencionado no comentário de Tomalak) como antes. Se você está limitado a fazer este lado do cliente em Javascript, então você pode fazer o processamento equivalente lá antes de entregar os dados para qualquer function que o necessite.

editar / comentar followup # 2:

Eu duvido muito dos espaços de saída dentro dos valores dos dados JSON. JSON é perfeitamente capaz de manipular espaços onde quer que ocorram dentro de uma string e não se importa com quantos (ou poucos) existem. Provavelmente são os personagens funky na input GlossTerm .

Se você estiver no PHP 5.3 (ou uma versão beta mais alta), há json_last_error() que informará sobre por que o decodificador está falhando.