JSON编码中的JSON

时间:2014-12-25 09:13:56

标签: php json

我对PHP json_encode在JSON中如何表现JSON感到困惑。

以下是我缩短的代码:

public function testcase() {
    $return = array();

    $return['kOut1'] = 'valueOfKOut1';
    $return['kOut2'] = 'valueOfKOut2';

    $json = '[{"k1In1":10,"k1In2":0,"k1In3":2}, {"k2In1":7,"k2In2":6,"k2In3":5}]';
    $data = json_decode($json, TRUE);
    if (json_last_error()!=JSON_ERROR_NONE) {
        die("Error parsing json");
    }

    $elements = array();

    foreach ($data as $element) {

        $e = array();

        foreach ($element as $key=>$value) {
            $e[$key] = $value;
        }

        array_push($elements, $e);
    }

    $return['kOutLast'] = json_encode($elements); // NOTE: if $json is here, same result!

    echo json_encode($return);
}

上面脚本的输出:

{"kOut1":"valueOfKOut1","kOut2":"valueOfKOut2","kOutLast":"[{\"k1In1\":10,\"k1In2\":0,\"k1In3\":2},{\"k2In1\":7,\"k2In2\":6,\"k2In3\":5}]"}

混淆:为什么我在\"的值中包含kOutLast(反斜杠和双引号)?它应该只是"。正确?

我也尝试了json_encode中的各种选项(例如),但仍然没有运气。你有想法吗?

提前致谢,

信息:我在Code Igniter框架中编码,XAMPP v3.2.1(2013年5月7日编译)。

1 个答案:

答案 0 :(得分:3)

JSON字符串由"终止。如果字符串本身中有"个字符,则显然需要对其进行转义。用于表示文本"的正确JSON字符串为"\""。您的字符串“是JSON”绝对不用担心。重要的是它是一个包含引号的字符串。要编码包含引号为JSON的字符串,需要使用反斜杠转义所有引号。

如果您真正想要做的是将现有JSON对象合并到另一个JSON对象中,则需要先对其进行解码:

$json = '[{"key":"value",..}]';
$data = json_decode($json);
$data = array('wrapper' => $data);

echo json_encode($data);