Прекратить PHP экранирование строки JSON при записи в файл - PullRequest
2 голосов
/ 14 сентября 2011

Я пытаюсь сохранить изменения в файле JSON, используя JQuery и PHP, но, похоже, мой PHP-скрипт экранирует символы, когда он сохраняет JSON, то есть я не могу прочитать его снова.

Я передаю объект JSON ('family') в save.php, используя следующий код:

function saveChanges() {
    $.ajax({
        type: "POST",
         url: "save.php",
         data: {
            data: JSON.stringify(family)
         },


         success: function(msg){
             console.log(data);
   }
 });
    }

Затем save.php записывает данные JSON в armstrong.json со следующим кодом

<?php

$data = $_POST["data"];
echo $data;
$filename = 'armstrong.json';

if (is_writable($filename)) {
    if (!$handle = fopen($filename, "w")) {
         echo "Cannot open file ($filename)";
         exit;
    }

    if (fwrite($handle, parse_json($data)) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }
echo "Success, wrote ($data) to file ($filename)";

fclose($handle);

} else {
    echo "The file $filename is not writable";
}

?>

Однако файл записывается следующим образом:

{\"title\":\"Armstrong\",\"description\":\"The Armstrong Family\",\"patriarchID\":\"id1\",\"latestID\":8,\"members\":[{\"name\":\"Grandad\",\"id\":\"id1\",\"children\":[\"id2\",\"id3\"]},{\"name\":\"Dad\",\"id\":\"id2\",\"children\":[\"id4\",\"id5\",\"id6\",\"id7\"]},{\"name\":\"Uncle\",\"id\":\"id3\"},{\"name\":\"Child\",\"id\":\"id4\"},{\"name\":\"Child\",\"id\":\"id5\"},{\"name\":\"Child\",\"id\":\"id6\"},{\"name\":\"Child\",\"id\":\"id7\"},{\"name\":\"a\",\"id\":\"id8\"}]}{\"title\":\"Armstrong\",\"description\":\"The Armstrong Family\",\"patriarchID\":\"id1\",\"latestID\":9,\"members\":[{\"name\":\"Grandad\",\"id\":\"id1\",\"children\":[\"id2\",\"id3\"]},{\"name\":\"Dad\",\"id\":\"id2\",\"children\":[\"id4\",\"id5\",\"id6\",\"id7\"]},{\"name\":\"Uncle\",\"id\":\"id3\"},{\"name\":\"Child\",\"id\":\"id4\"},{\"name\":\"Child\",\"id\":\"id5\"},{\"name\":\"Child\",\"id\":\"id6\"},{\"name\":\"Child\",\"id\":\"id7\"},{\"name\":\"a\",\"id\":\"id8\"},{\"name\":\"a\",\"id\":\"id9\"}]}{\"title\":\"Armstrong\",\"description\":\"The Armstrong Family\",\"patriarchID\":\"id1\",\"latestID\":10,\"members\":[{\"name\":\"Grandad\",\"id\":\"id1\",\"children\":[\"id2\",\"id3\"]},{\"name\":\"Dad\",\"id\":\"id2\",\"children\":[\"id4\",\"id5\",\"id6\",\"id7\"]},{\"name\":\"Uncle\",\"id\":\"id3\"},{\"name\":\"Child\",\"id\":\"id4\"},{\"name\":\"Child\",\"id\":\"id5\"},{\"name\":\"Child\",\"id\":\"id6\"},{\"name\":\"Child\",\"id\":\"id7\"},{\"name\":\"a\",\"id\":\"id8\"},{\"name\":\"a\",\"id\":\"id9\"},{\"name\":\"a\",\"id\":\"id10\"}]}

Любые идеи, как я могу остановить его экранирование символов?Файл JSON должен выглядеть следующим образом

{
            "title"         :   "Armstrong",
            "description"   :   "The Armstrong Family",
            "patriarchID"   :   "id1",
            "latestID"      :   7,
            "members"       :   [
                {
                    "name"  :   "Grandad",
                    "id"    :   "id1",
                    "children": ["id2","id3"]
                },
                {
                    "name"  :   "Dad",
                    "id":       "id2",
                    "children": ["id4","id5","id6","id7"]
                },
                {
                    "name"  :   "Uncle",
                    "id"    :   "id3"
                },
                {
                    "name"  :   "Child",
                    "id" :  "id4"
                },
                {
                    "name"  :   "Child",
                    "id"    :   "id5"
                },
                {
                    "name"  :   "Child",
                    "id"    :   "id6"
                },
                {
                    "name"  :   "Child",
                    "id"    :   "id7"
                }

            ]
}

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Возможно, в вашем php.ini включены магические кавычки . Вы должны выключить их. Это объясняет побег

РЕДАКТИРОВАТЬ - если вам нужно больше узнать о магических кавычках, прочитайте здесь . Магические кавычки плохие, если у вас есть доступ к php.ini, вы должны отключить их

1 голос
/ 14 сентября 2011

У вас включено magic_quotes_gpc, и косые черты уже существуют в то время, когда вы делаете $data = $_POST['data'].

Смотрите этот ответ: Косая черта добавлена ​​ко всем моим сообщениям

Кстати, вы можете заменить fopen / fwrite / fclose на file_put_contents

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...