Home  >  Article  >  Backend Development  >  PHP生成JSON相关的问题

PHP生成JSON相关的问题

WBOY
WBOYOriginal
2016-06-06 20:29:071177browse

关于PHP生成JSON数据的几个问题。

<code>foreach($re as $key=>$value){
    $dd['code'][0]->$key=$value;
    }
$ff = json_encode($dd);
print_r($ff);

// 输出
{"code":[{"0":{"key":"value"},"1":{"key":"value"}}]}</code>

请问要怎么在code前现加一点内容呢?比如:"url":"www.com",使生成的JSON就成这样。

<code>{"url":"www.com", "code":{"0":{"key":"value"},"1":{"key":"value"}}}}</code>

还就是输出的中文全变成了这样\u8f8a\u67e5\u538d,要怎么才能输出成中文呢?

Google了半天都没找到办法,找到的基本全这样的。

<code>$aa = urlencode($dd);
echo urldecode(json_encode($aa));</code>

可是这样不仅不能输出中文,连输出都没有了。。。
var_dump($aa)输出的是NULL,这可怎么办是好啊。。

=============追加=================
那个出现个问题。

<code>{
    "url":"www.com",
    "0":
    {
        "code":
        {
            "0":{"key":"value"},
            "1":{"key":"value"}
        }
    }
}</code>

生成的JSON会变成这样子,请问要怎么把这此数字去掉呢?

=================二追===================

<code>$aa = array("url"=>"www.com");
json_encode(array($aa,$dd['code']), JSON_UNESCAPED_UNICODE);</code>

这样能可以实现想要的,可是有个问题。
从Mysql导出来的数据时怎么会有一个序号呢?

回复内容:

关于PHP生成JSON数据的几个问题。

<code>foreach($re as $key=>$value){
    $dd['code'][0]->$key=$value;
    }
$ff = json_encode($dd);
print_r($ff);

// 输出
{"code":[{"0":{"key":"value"},"1":{"key":"value"}}]}</code>

请问要怎么在code前现加一点内容呢?比如:"url":"www.com",使生成的JSON就成这样。

<code>{"url":"www.com", "code":{"0":{"key":"value"},"1":{"key":"value"}}}}</code>

还就是输出的中文全变成了这样\u8f8a\u67e5\u538d,要怎么才能输出成中文呢?

Google了半天都没找到办法,找到的基本全这样的。

<code>$aa = urlencode($dd);
echo urldecode(json_encode($aa));</code>

可是这样不仅不能输出中文,连输出都没有了。。。
var_dump($aa)输出的是NULL,这可怎么办是好啊。。

=============追加=================
那个出现个问题。

<code>{
    "url":"www.com",
    "0":
    {
        "code":
        {
            "0":{"key":"value"},
            "1":{"key":"value"}
        }
    }
}</code>

生成的JSON会变成这样子,请问要怎么把这此数字去掉呢?

=================二追===================

<code>$aa = array("url"=>"www.com");
json_encode(array($aa,$dd['code']), JSON_UNESCAPED_UNICODE);</code>

这样能可以实现想要的,可是有个问题。
从Mysql导出来的数据时怎么会有一个序号呢?

你的问题有两个:

1,如何追加内容?

json 和 array 是对应的,就像你给数据追加内容一样:

<code class="php">$url = 'www.com';
$code = array(
    array('key', 'value');
    array('key', 'value');
    array('key', 'value');
);

echo json_encode(array('url'=>$url, 'code'=>$code));</code>

2,如何不乱码?

php5.4 之后 json 新增了一个选项 JSONUNESCAPEDUNICODE:

<code class="php">echo json_encode(array('url'=>$url, 'code'=>$code), JSON_UNESCAPED_UNICODE);</code>

让 json 更懂中文

要在code前加上内容,可以在要转换为json的数组前加上值就可以了吧。-_-

<code class="php">$dd['url'] = 'www.xx.com';</code>

PHP版本始于5.4后可用JSON_UNESCAPED_UNICODE参数常量来将字符不转换为unicode码,具体参考手册。

<code class="php">$ff = json_encode($dd, JSON_UNESCAPED_UNICODE); </code>

如果PHP版本小于5.4,可参考如下方法:

<code class="php">function json_encode_utf8($value) {
    $jsons = json_encode($value);
    return preg_replace(
        "#\\\u([0-9a-f]{4}+)#ie",
        "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))",
        $jsons
    );
}</code>

\u8f8a\u67e5\u538d 本身就是中文啊, 这个是交给前端处理的。

PHP生成JSON相关的问题

问题1:

<code>$dd['url'] = 'www.com';
$dd['code'] = array();</code>

问题2:
见1楼,那个是js中推荐的汉字使用方式,与文件编码无关。js中直接使用

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn