PHP解析异常JSON出现空结果的问题求助
问题分析与解决方案
你遇到的问题核心是JSON结构的路径访问错误,同时建议你增加解码失败的校验逻辑,避免后续代码因为解码异常导致无意义的空值问题。
问题根源
观察你提供的ResultString嵌套JSON结构,Login字段是嵌套在DadosBasicos对象下的,而你的代码直接尝试访问$json_002->Login——这个路径并不存在,所以自然会得到空值。
正确的层级路径是:ResultString → DadosBasicos → Login
修正后的代码
$response = '{"Status":1,"CodigoErro":null,"SKYException":"","ResultString":"{\"DadosBasicos\":{\"NomeCompleto\":null,\"Nome\":null,\"Sobrenome\":null,\"DataNascimento\":\"0001-01-01T00:00:00\",\"EstadoCivil\":null,\"Login\":\"xxxxxxxxxxxxx@yahoo.com.br\",\"Sexo\":0,\"CPF_CNPJ\":\"09414954775\",\"IdPerfilFaturamento\":null,\"IdConta\":\"13879034\",\"Assinaturas\":[{\"Id\":\"62606412\",\"ParentId\":null,\"Email\":\"xxxxxxxxxxxxx@yahoo.com.br\",\"DNA\":\"010000000001001000000010000000001000000000000000001000000010000000000001000000000000000010110001111101000000001000000001000000000111101000000100000101000001000011111111111110000000000000000000011000000010101011101111110100000000111110101101111100010000000000011011111111011010011011100011111111111101111111111111111111111111111111111101111111111110101111111111111011110100000011111111111111111111000\",\"StatusAssinatura\":1,\"ValorEmAberto\":null,\"CEP\":\"27540440\",\"TipoAssinatura\":0,\"ModoEntrega\":0,\"Produtos\":[],\"Equipamentos\":[],\"IlhaMaster\":false,\"Tier1\":true,\"PrincipalId\":\"062606412\",\"Enderecos\":null,\"Telefones\":null,\"TipoOrganizacao\":0,\"PassoRegua\":null,\"GeoCode\":\"BRL04100\",\"Fidelizado\":false,\"PossuiInteratividadePrePago\":false,\"PossuiSKYDigitalCortesia\":false,\"PossuiCanaisCortesiaLivre\":false,\"DataAtivacao\":\"2011-01-25T00:00:00\",\"DataFidelizacao\":\"2012-01-25T00:00:00\",\"TipoCliente\":\"F\",\"Segmento\":null,\"Pacote\":null,\"GloboCongelada\":[],\"ListaDeCanais\":[],\"CodigoTipoAssinatura\":null,\"CanceladoAteSeisMeses\":false,\"DataCancelamento\":null}]},\"DadosComplementares\":null}","Token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjcGZfY25waiI6IjA5NDE0OTU0Nzc1Iiwic2lnbmF0dXJlcyI6WyI2MjYwNjQxMiJdLCJpYXQiOjE1NDc5MTA4NDgsImV4cCI6MTU0Nzk5NzI0OH0.ho1V67cI4jZPXZ-DqnF-WzCRSKSY38uJuQs0tRXrdYM"}'; // 解码外层JSON,同时校验解码是否成功 $json_bad = json_decode($response); if (json_last_error() !== JSON_ERROR_NONE) { die('外层JSON解码失败: ' . json_last_error_msg()); } // 解码ResultString中的嵌套JSON,同样添加校验 $json_002 = json_decode($json_bad->ResultString); if (json_last_error() !== JSON_ERROR_NONE) { die('ResultString解码失败: ' . json_last_error_msg()); } // 按照正确的层级路径获取Login字段 $email = $json_002->DadosBasicos->Login; var_dump($email); // 此时应该能输出目标邮箱地址
额外调试建议
- 每次调用
json_decode后,用json_last_error()和json_last_error_msg()检查解码状态,能快速区分是JSON格式问题还是路径访问错误。 - 如果你习惯使用数组操作,可以给
json_decode添加第二个参数true,让它返回关联数组,此时访问路径变为$json_002['DadosBasicos']['Login']。
内容的提问来源于stack exchange,提问作者Donald
相关产品推荐
相关产品推荐

