在JSON_ENCODE输出中转义\ n

时间:2019-03-01 00:02:49

标签: php json

因此,我尝试将新记录添加到我的JSON文件中,但是当我对文件进行编码时,会得到\\n一堆。我该如何删除那些?

JSON

{
    "clients": [
        {
            "id": 1,
            "name": "Name",
            "description": "XXX",
            "services": [
                {
                    "name": "dddd",
                    "host": "ddddddd",
                    "login": "ddddd",
                    "password": "ddddd"
                },
                {
                  "name": "dddd",
                  "host": "ddddddd",
                  "login": "ddddd",
                  "password": "ddddd"
                }
            ]
        }
    ]
}

PHP

  $inp = file_get_contents('app/keyring.json');
  $tempArray = json_decode($inp);
  $data = '{
    "id": 5,
    "name": "dddd ddd",
    "description": "ddd"
  }';

  array_push($tempArray->clients, $data);
  $jsonData = json_encode($tempArray, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
  file_put_contents('app/keyring.json', $jsonData);

这将导致:

"{\n    \"id\": 5,\n    \"name\": \"dddd ddd\",\n    \"description\": \"ddd\"\n  }"

1 个答案:

答案 0 :(得分:2)

您正在将字符串而不是对象推入数组。它被双重转义,因此在解析文件时它仍然是字符串,因为这就是您编码的内容。改用它:

QString

或者,如果您实际上是在PHP中构建对象而不是从其他地方获取它作为JSON,则可以执行以下操作:

$data = json_decode('{
  "id": 5,
  "name": "dddd ddd",
  "description": "ddd"
}');

array_push($tempArray->clients, $data);