PHP array_push添加不必要的引号

时间:2019-01-05 23:20:18

标签: php json array-push

所以我需要将数据原样添加到JSON中。

  

期望的JSON

  "users": [
    {
      "username": "admin",
      "password": "admin",
      "isAdmin": true
    },
    {
      "username": "bleh",
      "password": "meh",
      "isAdmin": false
    }
  ]
  

相反,我得到了:

"users": [
        {
          "username": "admin",
          "password": "admin",
          "isAdmin": true
        },
        {
          "username": "bleh",
          "password": "meh",
          "isAdmin": false
        },
 "{\"isAdmin\":false,\"username\":\"test1\",\"password\":\"$2y$10$fSb.0bw\\\/MbtBx.PHerRdU.gahYnRezZZuy8VYL41ah8YwPxW6hOTq\"}"
          ]

我无法解决这个问题,因为我找不到找到代码的哪个部分在添加的字符串中添加多余的引号和反斜杠的方法。

这是我的php代码,负责将值添加到JSON:

      if (self::checkExistence($this->username) == true){
        return false;
    }

    $newUserJson = json_encode($this);

    $inp = file_get_contents(getcwd() . self::USERS_LOCATION);
    $tempArray = json_decode($inp,true);

    array_push($tempArray["users"], $newUserJson);

    $jsonData = json_encode($tempArray);
    file_put_contents(getcwd() . self::USERS_LOCATION, $jsonData);

    return true;

我知道使用文件而不是数据库并不是“最佳实践”,但现在使用文件就可以满足我的需求,因此请不要评论“使用db代替”之类的内容。

2 个答案:

答案 0 :(得分:1)

这是因为您正在对字符串进行双重编码。您$newUserJson对其进行一次编码,然后将其插入到数组$tempArray["users"]中并对该数组进行编码。

您可以删除以下行:

$newUserJson = json_encode($this);

然后更新此行

array_push($tempArray["users"], $this);

这应该可以解决问题

答案 1 :(得分:0)

替换:

$newUserJson = json_encode($this);

带有以下行:

$newUserJson = $this;