好的,所以我正在使用js编写Web操作系统。我正在使用JSON文件系统。我已经在网上寻找关于JSON东西的教程大约一个星期了,但我找不到任何关于从网页编写JSON文件的内容。我需要在文件中创建新对象,而不是更改现有对象。到目前为止,这是我的代码:
{"/": {
"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 :(得分:4)
我认为更好的解决方案是将JSON字符串化,使用base64编码进行编码,然后将其发送到服务器端脚本(例如PHP页面),这样可以保存此文件。参见:
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);
答案 1 :(得分:0)
我从键中取下“/”然后可以拆分“/”并通过从结果中移除值来走树。例如,以下代码将创建完整路径(如果它尚不存在),但保留文件夹&amp;内容,如果它。
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来获得最终结果可能会更简单。