当我使用JSON解析时,PHP中的数组对象不打印

时间:2014-02-13 16:33:03

标签: php arrays json

使用解决方案进行编辑!!!! 对于NOOBS来说非常重要我喜欢:

问题是数据不是UTF-8所以我包含一个将这些数据转换为UTF-8的函数。

这里的功能:

  

function utf8_string_array_encode(& $ array){       $ func = function(& $ value,& $ key){           如果(IS_STRING($值)){               $ value = utf8_encode($ value);           }           如果(IS_STRING($键)){               $ key = utf8_encode($ key);           }           如果(is_array($值)){               utf8_string_array_encode($值);           }       };       array_walk($阵列,$ FUNC);       return $ array; }

然后当我使用字符串UTF-8的新数组时,我使用json_encode,结果是:

  

{ “0”: “1”, “CodigoAbogado”: “1”, “1”: “24898”, “NumeroColegiado”: “24898”, “2”:“JOAN   LLUIS GONZALEZ FERRERI“,”Nombre“:”JOAN LLUIS GONZALEZ   FERRERI “ ”3“: ”“, ”NombreComun“: ”“, ”4“: ”“, ”NIF“: ”“, ”5“: ”“, ”Direccion“: ”“, ”6“:” juanluis@ferreriabogados.com”, “邮件”: “juanluis@ferreriabogados.com”, “7”: “”, “CodigoPostal”: “”, “8”: “”, “Poblacion”: “”, “9” : “”, “省报”: “”, “10”: “埃斯帕\ u00f1a”, “国家报”: “埃斯帕\ u00f1a”, “11”: “”, “NOTAS”: “”, “12”:” Administrador”, “Usuario”: “Administrador”, “13”: “1”, “SerialCertificado”: “1”, “14”:0, “CodigoColegioAbogado”:0, “15”: “”, “NombreColegioAbogado”: “”, “16”: “00”, “CanalHabitualAbogado”: “00”, “17”: “”, “EmpresaPredeterminadaEosCodigo”: “”, “18”: “”, “EmpresaPredeterminadaEosNombre”: “”, “19” : “0000000001”, “ClienteTurnoOficio”: “0000000001”, “20”: “00”, “ClienteSerieTurnoOficio”: “00”, “21”:0, “IPF”:0, “22”: “”,“TipoVia “:” “ ”23“: ”“, ”ImportIdentificacion“: ”“, ”24“: ”“, ”CertNombre“: ”“, ”25“:”   “ ”Sexo“:”   ”, “26”:0, “DESC1”:0, “27”:0, “DESC2”:0, “28”:0, “Desc3”:0, “29”:0, “Desc4”:0, “30”:0, “Desc5”:0, “31”:0, “Desc6”:0, “32”:1, “Avis_Guardia”:1, “33”:0, “Avis_Vista”:0,“34 “:1,” Tiempo_Avis “:1,” 35 “:3”,Tiempo_Tipo “:3,” 36 “:1,” MostrarInforme “:1,” 37 “:” 000000002EEFA536C0B8B44B9B44E513587FBA9BA4F22000" , “IdOutLook”: “000000002EEFA536C0B8B44B9B44E513587FBA9BA4F22000”, “38”:“十一月   10 2011 11:32:54:000AM“,”UltimaModificacion“:”2011年11月10日   11:32:54:000AM”, “39”: “\ u00bd”, “ESPECIAL”: “\ u00bd”}]


我在php中有一个小脚本有问题。

脚本在MS SQL中访问数据库并获取执行查询的数据。

代码是:

<?php

$conn = mssql_connect('PROGRAMACION6', 'Administrador', '');
mssql_select_db('Empresa_00001', $conn);

$queryStr = "Select * from abogados where usuario='Administrador'";

$query= mssql_query($queryStr) or die('MSSQL error: ' . mssql_get_last_message());

$arr = array();

while ($obj = mssql_fetch_array($query)) {
        $arr[] = $obj;
    }

echo '{"Objetos:"'.json_encode($arr).'}';

?>

当我执行我的脚本时,我得到一个白色屏幕,显示任何数据......

但是当我说出来的时候:

print_r ($arr);

我可以看到数组内容跟随数据:

Array ( [0] => Array ( [0] => 1 [CodigoAbogado] => 1 [1] => 24898 [NumeroColegiado] => 24898 [2] => JOAN LLUIS GONZALEZ FERRERI [Nombre] => JOAN LLUIS GONZALEZ FERRERI [3] => [NombreComun] => [4] => [NIF] => [5] => [Direccion] => [6] => juanluis@ferreriabogados.com [Mail] => juanluis@ferreriabogados.com [7] => [CodigoPostal] => [8] => [Poblacion] => [9] => [Provincia] => [10] => España [Pais] => España [11] => [Notas] => [12] => Administrador [Usuario] => Administrador [13] => 1 [SerialCertificado] => 1 [14] => 0 [CodigoColegioAbogado] => 0 [15] => [NombreColegioAbogado] => [16] => 00 [CanalHabitualAbogado] => 00 [17] => [EmpresaPredeterminadaEosCodigo] => [18] => [EmpresaPredeterminadaEosNombre] => [19] => 0000000001 [ClienteTurnoOficio] => 0000000001 [20] => 00 [ClienteSerieTurnoOficio] => 00 [21] => 0 [IPF] => 0 [22] => [TipoVia] => [23] => [ImportIdentificacion] => [24] => [CertNombre] => [25] => [Sexo] => [26] => 0 [Desc1] => 0 [27] => 0 [Desc2] => 0 [28] => 0 [Desc3] => 0 [29] => 0 [Desc4] => 0 [30] => 0 [Desc5] => 0 [31] => 0 [Desc6] => 0 [32] => 1 [Avis_Guardia] => 1 [33] => 0 [Avis_Vista] => 0 [34] => 1 [Tiempo_Avis] => 1 [35] => 3 [Tiempo_Tipo] => 3 [36] => 1 [MostrarInforme] => 1 [37] => 000000002EEFA536C0B8B44B9B44E513587FBA9BA4F22000 [IdOutLook] => 000000002EEFA536C0B8B44B9B44E513587FBA9BA4F22000 [38] => Nov 10 2011 11:32:54:000AM [UltimaModificacion] => Nov 10 2011 11:32:54:000AM [39] => ½ [ESPECIAL] => ½ ) )

如何将此数组转换为JSON对象?我测试了我在互联网上找到的所有示例代码但没有工作......

非常感谢。

编辑:

我做到了:

  

switch(json_last_error()){       case JSON_ERROR_NONE:           echo' - JSON_ERROR_NONE';       打破;       案例JSON_ERROR_DEPTH:           echo' - JSON_ERROR_DEPTH';       打破;       案例JSON_ERROR_STATE_MISMATCH:           echo' - JSON_ERROR_STATE_MISMATCH';       打破;       case JSON_ERROR_CTRL_CHAR:           echo' - JSON_ERROR_CTRL_CHAR';       打破;       案例JSON_ERROR_SYNTAX:           echo“\ r \ n \ r \ n - SYNTAX ERROR \ r \ n \ r \ n”;       打破;       案例JSON_ERROR_UTF8:           echo' - JSON_ERROR_UTF8';       打破;       默认:           echo' - 未知的错误';       打破; }

我的screeen打印出来了:

  

JSON_ERROR_UTF8

那么我怎么解决这个问题呢? pffff就是这样 令人沮丧...

2 个答案:

答案 0 :(得分:0)

您的数据被提取为一个对象数组,请注意输出包含'[0] =&gt; stdClass对象'。您正在使用'mssql_fetch_object',而是使用'mssql_fetch_array'来将结果作为数组获取。

答案 1 :(得分:0)

似乎你有一些与charset相关的问题。

json_encode要求输入字符串是UTF-8

如何设置mySQL连接的charset,以及使用从正在获取数据的表的charset / collat​​ion到影响脚本的行为。