2013-06-10 2 views
3

Итак, я программирую веб-операционную систему с помощью js. Я использую JSON для файловой системы. Я просматриваю онлайн-учебники по материалам JSON около недели, но я не могу найти что-либо в написании файлов JSON с веб-страницы. Мне нужно создать новые объекты в файле, а не изменять существующие. Вот мой код до сих пор:как писать json-файлы в javascript

{"/": { 
      "Users/": { 
       "Guest/": { 
        "bla.txt": { 
         "content": 
          "This is a test text file" 
        } 

       }, 
       "Admin/": { 
        "html.html": { 
         "content": 
          "yo" 

        } 
       } 
      }, 
      "bin/": { 
       "ls": { 
         "man": "Lists the contents of a directory a files<br/>Usage: ls" 
       }, 
       "cd": { 
        "man": "Changes your directory<br/>Usage: cd <directory>" 
       }, 
       "fun": { 
        "man": "outputs a word an amount of times<br/>Usage: fun <word> <times>" 
       }, 
       "help": { 
        "man": "shows a list of commands<br/>Usage: help" 
       }, 
       "clear": { 
        "man": "Clears the terminal<br/>Usage: clear" 
       }, 
       "cat": { 
        "man": "prints content of a file<br/>Usage: cat <filename>" 
       } 
      }, 
      "usr/": { 
       "bin/": { 

       }, 
       "dev/": { 

       } 
      } 
     }} 
+0

Где бы вы хотели писать файлы со своей страницы? –

+0

О каком предмете вы говорите? – Starx

+4

Вообще говоря: проанализируйте его с помощью 'JSON.parse', измените его так же, как и любой другой JavaScript' Object', а затем снова закодируйте его с помощью 'JSON.stringify'. –

ответ

4

Я думаю, что лучшим решением является stringify ваш JSON, закодировать с кодировкой base64, а затем отправить его на стороне сервера сценария (РНР страницы, например), которые могли бы сохранить этот файл. См:

var json = JSON.stringify(myJson); 
var encoded = btoa(json); 

Вы можете использовать AJAX для отправки:

var xhr = new XMLHttpRequest(); 
xhr.open('POST','myServerPage.php',true); 
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
xhr.send('json=' + encoded); 

И в стороне сервера:

$decoded = base64_decode($_POST['json']) 
$jsonFile = fopen('myJson.json','w+'); 
fwrite($jsonFile,$decoded); 
fclose($jsonFile); 
0

Я бы снять "/" 's из Затем ключи могут разбиваться на «/» и ходить по дереву, сдвигая значения с результата. Например, следующий код создаст полный путь, если он еще не существует, но сохранив содержимое папки &, если это произойдет.

var fs = { 
    "bin": { 
     "mkdir": function(inPath) { 
      // Gets rid of the initial empty string due to starting/
      var path = inPath.split("/").slice(1); 
      var curFolder = fs; 

      while(path.length) { 
       curFolder[path[0]] = curFolder[path[0]] || {}; 
       curFolder = curFolder[path.shift()]; 
      } 
     } 
    } 
} 

fs.bin.mkdir("/foo/bar"); 

console.log(JSON.stringify(fs, function(key,val) { 
    if(key === 'mkdir') return undefined; 

    return val; 
}, 2)); 

Выход:

{ 
    "bin": {}, 
    "foo": { 
    "bar": {} 
    } 
} 

Как уже упоминалось, а не строить объект JSON вручную со строками, чтобы избежать синтаксических ошибок (и разочарование), строить его с помощью кода, то с помощью JSON.stringify для получения конечного результата, вероятно, будет проще.

Смежные вопросы