GVKun编程网logo

摆脱PHP中json_encode中的int索引以获取多维数组(php解析json多维数组)

10

如果您对摆脱PHP中json_encode中的int索引以获取多维数组感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于摆脱PHP中json_encode中的int索引以获取多

如果您对摆脱PHP中json_encode中的int索引以获取多维数组感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于摆脱PHP中json_encode中的int索引以获取多维数组的详细内容,我们还将为您解答php解析json多维数组的相关问题,并且为您提供关于json_encode php中json_encode中文编码问题分析、php – json_encode()在多维数组上 – 使用字符串键、php中json_decode()和json_encode()用法与中文不显示解决办法、php中json_decode()和json_encode()用法与中文不显示解决办法_PHP教程的有价值信息。

本文目录一览:

摆脱PHP中json_encode中的int索引以获取多维数组(php解析json多维数组)

摆脱PHP中json_encode中的int索引以获取多维数组(php解析json多维数组)

这是一个很难解释的问题,所以请告诉您.如果您在下面看,您将看到有效的JSON.

{
    "data":{
        "0":{
            "action_id":"1",
            "date":"2012-04-10 15:07:38",
            "action_type":"1",
            "action_text":"Some one got blamed!"
        },
        "1":{
            "action_id":"2",
            "date":"2012-04-10 16:18:05",
            "action_type":"1",
            "action_text":"Testing multiple items for AJAX"
        },
        "total":2,
        "ajax_message":"Success",
        "ajax_status":"0",
        "success":"true"
    }
}

但是对于正在使用的应用程序,它无法处理“ 0”:,“ 1”,而是只希望将其逗号分隔.

我当前生成的代码是:

while ($r = MysqL_fetch_assoc($q)) {
        $array[] = $r;
    }
json_encode($array);

目前还相当简单和原始.但是我想我可能不得不为自己写一个json_encode,以便它像这样打印它…..

任何帮助将不胜感激

注意:这是一个有效的表格(手写):

{
"data": [
{
"action_id": "1",
"date": "2012-04-10 15:07:38",
"action_type": "1",
"action_text": "Some one got blamed!",
"fb_id": "760775384"
},
{
"action_id": "2",
"date": "2012-04-10 16:18:05",
"action_type": "1",
"action_text": "Testing multiple items for AJAX",
"fb_id": "760775384"
}
],
"total": 2,
"ajax_message": "Success",
"ajax_status": "0",
"success": "true"
}

解决方法:

问题在于您的数字键(0、1)在哈希中与命名键(总计,ajax_message等)处于同一级别.而不是这样做:

$a = array();
while ($r = MysqL_fetch_assoc($q)){
    $a[] = $r;
}
$a[''key''] = value;

做这个:

$a = array();
$a[''rows''] = array();
while ($r = MysqL_fetch_assoc($q)){
    $a[''rows''][] = $r;
}
$a[''key''] = value;

如果数组中的每个键(在此示例中为$a [‘rows’])都是数字键,则json_encode()会将其输出为[{list},{like},{this}]

总结

以上是小编为你收集整理的摆脱PHP中json_encode中的int索引以获取多维数组全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

原文地址:https://codeday.me/bug/20191101/1983700.html

json_encode php中json_encode中文编码问题分析

json_encode php中json_encode中文编码问题分析

例如:''胥''经过json_encode处理后变为''\u80e5'',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。
  我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!
测试代码如下:

复制代码 代码如下:


class myClass {
public $item1 = 1;
public $item2 = ''中文'';
function to_json() {
//url编码,避免json_encode将中文转为unicode
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
//url解码,转完json后将各属性返回,确保对象属性不变
$this->item2 = urldecode($this->item2);
return urldecode($str_json);
}
}
$c = new myClass();
echo json_encode($c);
echo ''
'';
echo $c->to_json();
echo ''
'';
echo json_encode($c);
echo ''
'';
echo json_encode(''胥'');
?>


程序输出结果:

复制代码 代码如下:


{"item1":1,"item2":"\u4e2d\u6587"}
{"item1":1,"item2":"中文"}
{"item1":1,"item2":"\u4e2d\u6587"}
"\u80e5"


希望本文起到抛砖引玉的作用,收集大家更好的解决方法……!

以上就介绍了json_encode php中json_encode中文编码问题分析,包括了json_encode方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

php – json_encode()在多维数组上 – 使用字符串键

php – json_encode()在多维数组上 – 使用字符串键

我正在使用 PHP创建一个非常大的多维数组.每个对象都包含Name,ID,ParentID和Children.子元素是一组具有相同格式的更多对象.

关键是我命名每个对象的ID – 这有助于我将每个对象放在正确的父对象之下. (在下面的代码中,我使用101,102等)

但是,我遇到的问题是当我使用json_encode在JSON中返回数组时.每个’Children’数组都被打印为一个对象,而不是一个数组 – 如下面的JSON代码所示.

当我读到另一个SO线程here时,它们“由于包含字符串键而被制作为对象” – 尽管它们是数字,但它们仍然是字符串.

{
"101": {
    "ID": "101","ParentID": "0","Name": "Root One"
    "Children": {
        "102": {
            "ID": "102","ParentID": "101","Name": "Child One"
        },"103": {
            "ID": "103","Name": "Child Two","Children": {
                "104": {
                    "ID": "104","ParentID": "103","Name": "Child Child One"
                }
            }
        },

有谁知道如何克服这个问题?

编辑:JSON应该如下所示(方括号很重要!):

[
{
    "ID": "101","Name": "Root One","Children": [
        {
            "ID": "102","Name": "Child One","Children": [

解决方法

JSON数组没有显式索引,它只是一个有序列表.唯一具有命名键的JSON数据结构是一个对象.文字应该使这一点非常明显:

["foo","bar","baz"]

此数组没有命名索引,也没有任何添加任何规定.

PHP将列表和键值存储混合为一种数组数据类型. JSON没有.

php中json_decode()和json_encode()用法与中文不显示解决办法

php中json_decode()和json_encode()用法与中文不显示解决办法

本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。

php中json_decode()和json_encode()

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 对 JSON 格式的字符串进行编码

说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量

参数

json
待解码的 json string 格式的字符串。

assoc
当该参数为 TRUE 时,将返回 array 而非 object 。


返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.

范例

立即学习“PHP免费学习笔记(深入)”;

Example #1 json_decode() 的例子

 代码如下 复制代码

$json = ''{"a":1,"b":2,"c":3,"d":4,"e":5}'';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>

上例将输出:

object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}


$data=''[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]'';
echo json_decode($data);

结果为:

Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下

 代码如下 复制代码

echo json_decode($data,true);

结果:

Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 对变量进行 JSON 编码

Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式

Report a bug 参数

value
待编码的 value ,除了resource 类型之外,可以为任何数据类型

该函数只能接受 UTF-8 编码的数据

options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.

Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。

Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.


Report a bug 范例

Example #1 A json_encode() 的例子

 代码如下 复制代码

$arr = array (''a''=>1,''b''=>2,''c''=>3,''d''=>4,''e''=>5);

echo json_encode($arr);
?>

以上例程会输出:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Example #2 json_encode() 函数中 options 参数的用法

$a = array('''',"''bar''",''"baz"'',''&blong&'', "xc3xa9");

echo "Normal: ", json_encode($a), "n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "nn";

$b = array();

echo "Empty array output as array: ", json_encode($b), "n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "nn";

$c = array(array(1,2,3));

echo "Non-associative array output as array: ", json_encode($c), "n";
echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "nn";

$d = array(''foo'' => ''bar'', ''baz'' => ''long'');

echo "Associative array always output as object: ", json_encode($d), "n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "nn";
?>

以上例程会输出:

Normal: ["","''bar''",""baz"","&blong&","u00e9"]
Tags: ["u003Cfoou003E","''bar''",""baz"","&blong&","u00e9"]
Apos: ["","u0027baru0027",""baz"","&blong&","u00e9"]
Quot: ["","''bar''","u0022bazu0022","&blong&","u00e9"]
Amp: ["","''bar''",""baz"","u0026blongu0026","u00e9"]
Unicode: ["","''bar''",""baz"","&blong&","é"]
All: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","é"]

Empty array output as array: []
Empty array output as object: {}

Non-associative array output as array: [[1,2,3]]
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}

Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}

Example #3 连续与非连续数组示例

 代码如下 复制代码

echo "连续数组".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);

echo PHP_EOL."非连续数组".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);

echo PHP_EOL."删除一个连续数组值的方式产生的非连续数组".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>

以上例程会输出:

 代码如下 复制代码

连续数组
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

非连续数组
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"

删除一个连续数组值的方式产生的非连续数组
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"


$obj->Name= ''a1'';$obj->Number =''123'';
$obj->Contno= ''000'';
echo json_encode($obj);

结果为:

{"Name":"a1",
"Number":"123",
"Contno":"000"
}

可以看出json_encode()和json_decode()是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null


如果是中文的话就要注意了

在网上找到一种解决方法:

 代码如下 复制代码

/* 处理json_encode中文乱码 */
$data = array (''game'' => ''冰火国度'', ''name'' => ''刺之灵'', ''country'' => ''冰霜国'', ''level'' => 45 );
echo json_encode ( $data );
echo "
";
$newData = array ();
foreach ( $data as $key => $value ) {
$newData [$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $newData ) );
?>

后来请教了别人,还可以用base64编码,不过base64编码不可以放在URL中,百度是这样解释的:

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

不过我的数据是要通过POST发送的,并不在HTTP 的head中,而在message-body里,所以不受影响。

json_encode 只能接受utf-8格式的数据


例如:''胥''经过json_encode处理后变为''u80e5'',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。
  我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!
测试代码如下:

 代码如下 复制代码

class myClass {
public $item1 = 1;
public $item2 = ''中文'';
function to_json() {
//url编码,避免json_encode将中文转为unicode
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
//url解码,转完json后将各属性返回,确保对象属性不变
$this->item2 = urldecode($this->item2);
return urldecode($str_json);
}
}
$c = new myClass();
echo json_encode($c);
echo ''
'';
echo $c->to_json();
echo ''
'';
echo json_encode($c);
echo ''
'';
echo json_encode(''胥'');
?>

程序输出结果:

{"item1":1,"item2":"u4e2du6587"}
{"item1":1,"item2":"中文"}
{"item1":1,"item2":"u4e2du6587"}
"u80e5"


 

php中json_decode()和json_encode()用法与中文不显示解决办法_PHP教程

php中json_decode()和json_encode()用法与中文不显示解决办法_PHP教程

本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。

php中json_decode()和json_encode()

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 对 JSON 格式的字符串进行编码

说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量

参数

json
待解码的 json string 格式的字符串。

assoc
当该参数为 TRUE 时,将返回 array 而非 object 。


返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.

范例

立即学习“PHP免费学习笔记(深入)”;

Example #1 json_decode() 的例子

 代码如下 复制代码

$json = ''{"a":1,"b":2,"c":3,"d":4,"e":5}'';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>

上例将输出:

object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}


$data=''[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]'';
echo json_decode($data);

结果为:

Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下

 代码如下 复制代码

echo json_decode($data,true);

结果:

Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 对变量进行 JSON 编码

Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式

Report a bug 参数

value
待编码的 value ,除了resource 类型之外,可以为任何数据类型

该函数只能接受 UTF-8 编码的数据

options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.

Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。

Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.


Report a bug 范例

Example #1 A json_encode() 的例子

 代码如下 复制代码

$arr = array (''a''=>1,''b''=>2,''c''=>3,''d''=>4,''e''=>5);

echo json_encode($arr);
?>

以上例程会输出:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Example #2 json_encode() 函数中 options 参数的用法

$a = array('''',"''bar''",''"baz"'',''&blong&'', "xc3xa9");

echo "Normal: ", json_encode($a), "n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "nn";

$b = array();

echo "Empty array output as array: ", json_encode($b), "n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "nn";

$c = array(array(1,2,3));

echo "Non-associative array output as array: ", json_encode($c), "n";
echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "nn";

$d = array(''foo'' => ''bar'', ''baz'' => ''long'');

echo "Associative array always output as object: ", json_encode($d), "n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "nn";
?>

以上例程会输出:

Normal: ["","''bar''",""baz"","&blong&","u00e9"]
Tags: ["u003Cfoou003E","''bar''",""baz"","&blong&","u00e9"]
Apos: ["","u0027baru0027",""baz"","&blong&","u00e9"]
Quot: ["","''bar''","u0022bazu0022","&blong&","u00e9"]
Amp: ["","''bar''",""baz"","u0026blongu0026","u00e9"]
Unicode: ["","''bar''",""baz"","&blong&","é"]
All: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","é"]

Empty array output as array: []
Empty array output as object: {}

Non-associative array output as array: [[1,2,3]]
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}

Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}

Example #3 连续与非连续数组示例

 代码如下 复制代码

echo "连续数组".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);

echo PHP_EOL."非连续数组".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);

echo PHP_EOL."删除一个连续数组值的方式产生的非连续数组".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>

以上例程会输出:

 代码如下 复制代码

连续数组
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

非连续数组
array(4) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"

删除一个连续数组值的方式产生的非连续数组
array(3) {
[0]=>
string(3) "foo"
[2]=>
string(3) "baz"
[3]=>
string(5) "blong"
}
string(33) "{"0":"foo","2":"baz","3":"blong"}"


$obj->Name= ''a1'';$obj->Number =''123'';
$obj->Contno= ''000'';
echo json_encode($obj);

结果为:

{"Name":"a1",
"Number":"123",
"Contno":"000"
}

可以看出json_encode()和json_decode()是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null


如果是中文的话就要注意了

在网上找到一种解决方法:

 代码如下 复制代码

/* 处理json_encode中文乱码 */
$data = array (''game'' => ''冰火国度'', ''name'' => ''刺之灵'', ''country'' => ''冰霜国'', ''level'' => 45 );
echo json_encode ( $data );
echo "
";
$newData = array ();
foreach ( $data as $key => $value ) {
$newData [$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $newData ) );
?>

后来请教了别人,还可以用base64编码,不过base64编码不可以放在URL中,百度是这样解释的:

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

不过我的数据是要通过POST发送的,并不在HTTP 的head中,而在message-body里,所以不受影响。

json_encode 只能接受utf-8格式的数据


例如:''胥''经过json_encode处理后变为''u80e5'',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。
  我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!
测试代码如下:

 代码如下 复制代码

class myClass {
public $item1 = 1;
public $item2 = ''中文'';
function to_json() {
//url编码,避免json_encode将中文转为unicode
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
//url解码,转完json后将各属性返回,确保对象属性不变
$this->item2 = urldecode($this->item2);
return urldecode($str_json);
}
}
$c = new myClass();
echo json_encode($c);
echo ''
'';
echo $c->to_json();
echo ''
'';
echo json_encode($c);
echo ''
'';
echo json_encode(''胥'');
?>

程序输出结果:

{"item1":1,"item2":"u4e2du6587"}
{"item1":1,"item2":"中文"}
{"item1":1,"item2":"u4e2du6587"}
"u80e5"


 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632210.htmlTechArticle本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.js...

今天关于摆脱PHP中json_encode中的int索引以获取多维数组php解析json多维数组的分享就到这里,希望大家有所收获,若想了解更多关于json_encode php中json_encode中文编码问题分析、php – json_encode()在多维数组上 – 使用字符串键、php中json_decode()和json_encode()用法与中文不显示解决办法、php中json_decode()和json_encode()用法与中文不显示解决办法_PHP教程等相关知识,可以在本站进行查询。

本文标签: