Php json_encode内的json_encode结果

Php json_encode内的json_encode结果,php,json,Php,Json,我需要你的帮助,我不是一个人得到的。 请允许我填补这个空白 我有两门课: 第一个(应用程序)有一个方法(toJson)以json字符串的形式返回其私有变量 第二个(问题)包含第一个类,并且能够以json的形式返回它自己的内容及其子类的内容 现在,如果我调用上级第二个类的toJson方法,这个方法将调用其子类的toJson方法 两个toJson方法都使用json_encode。 逻辑结果是,最终结果包含转义字符 {"Application":"{\"Abbreviation\":\"GB\",\"

我需要你的帮助,我不是一个人得到的。 请允许我填补这个空白

我有两门课: 第一个(应用程序)有一个方法(toJson)以json字符串的形式返回其私有变量

第二个(问题)包含第一个类,并且能够以json的形式返回它自己的内容及其子类的内容

现在,如果我调用上级第二个类的toJson方法,这个方法将调用其子类的toJson方法

两个toJson方法都使用json_encode。 逻辑结果是,最终结果包含转义字符

{"Application":"{\"Abbreviation\":\"GB\",\"Identifier\":1,\"Name\":\"Great Bounce"\"}"}
应用程序的toJson方法与此类似:

公共函数toJson()
{
返回json_编码(数组(
“缩写”=>$this->\u缩写,
“标识符”=>$this->\u Identifier->getId(),
“Name”=>$this->\u Name
));
}
问题的解决方法:

公共函数toJson()
{
返回json_编码(数组(
“应用程序”=>$this->_Application->toJson();
));
}
转义字符导致JavaScript出现问题。
是否有人想到了解决方案或不同的实现?

您可以对数据进行解码,以获得一个对象,该对象将再次通过json编码:

public function toJson()
{
    return json_encode(array(
        "Application" => json_decode($this->_Application->toJson());
    ));
}

这样,您只会获得由其
toJSON
方法编码的
\u应用程序的属性。

这仍然允许您独立访问这些方法:

应用程序:

public function toJson()
{
    return json_encode($this->toArray());
}

public function toArray()
{
    return array(
        "Abbreviation" => $this->_Abbreviation,
        "Identifier" => $this->_Identifier->getId(),
        "Name" => $this->_Name
    );
}
问题:

public function toJson()
{
    return json_encode(array(
        "Application" => $this->_Application->toArray();
    ));
}

内部类真正返回的是字符串,而不是自身的数组表示形式。因此外部类正在编码一个字符串;这个字符串包含JSON数据几乎是不相关的。我建议内部类应该有一个方法,除了JSON表示之外,还可以将自身作为数组表示返回:

public function toJson() {
    return json_encode($this->toArray());
}

public function toArray() {
    return array(
        "Abbreviation" => $this->_Abbreviation,
        "Identifier" => $this->_Identifier->getId(),
        "Name" => $this->_Name
    )
}
public function toJson() {
    return json_encode(array(
        "Application" => $this->_Application->toArray();
    ));
}
然后,外部类采用以下数组表示形式:

public function toJson() {
    return json_encode($this->toArray());
}

public function toArray() {
    return array(
        "Abbreviation" => $this->_Abbreviation,
        "Identifier" => $this->_Identifier->getId(),
        "Name" => $this->_Name
    )
}
public function toJson() {
    return json_encode(array(
        "Application" => $this->_Application->toArray();
    ));
}

为了使其更灵活,我将toArray和toJson上的toJson方法分开:

应用程序类别:

public function toArray() {
    return array(
        "Abbreviation" => $this->_Abbreviation,
        "Identifier" => $this->_Identifier->getId(),
        "Name" => $this->_Name
    );
}

public function toJson() {
    return json_encode($this->toArray());
}
问题类别:

public function toArray() {
    return array(
        "Application" => $this->_Application->toArray();
    );
}

public function toJson() {
    return json_encode($this->toArray());
}

顺便说一句,最好将所有这些都打包到接口中。

您正在尝试用json编码一些已经用json编码的内容,对您的json编码,组装一个对象,然后对整个内容进行编码。这是唯一正确的方法。事实上,修复应用程序,使其不返回所有JSON,并且只在正确的层进行JSON编码才是正确的方法。什么样的问题
可以很好地处理这些问题,直接将JSON注入到代码中也可以很好地工作。你只需要解码两次。+1这避免了我答案中多余的解码和编码。嘿,Paulpro,现在我知道我必须上床睡觉了。非常感谢。因为我对性能非常感兴趣,所以这可能不是最好的选择(因为类的体系结构)。你有更好的建筑理念吗?@ MartinSheppard,欢迎你,同时也考虑其他的答案。这个答案对你有用,但其他答案也有用,它们避免了额外的时间对数据进行解码和编码。嘿,安德烈,也谢谢你。toArray和toJson的分离非常吸引人!当然,我已经有一个接口要实现:)谢谢:)