如何在JavaScript中编写JSON文件

4

好的,我正在使用js编写一个Web操作系统。我正在使用JSON作为文件系统。我已经在网上寻找关于JSON内容的教程约一周,但是我无法找到有关从Web页面编写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/": {

                }   
            }
        }}

你想从哪里在网页中写文件? - Denys Séguret
你在谈论什么类型的对象? - Starx
4
一般而言:使用JSON.parse解析它,像处理其他JavaScript对象一样进行修改,然后再使用JSON.stringify重新编码。 - James M
回答destroy的问题,要创建一个文件夹,用户需要键入mkdir <文件夹名称>。我只需要知道如何访问JSON文件,并通过JS编写新行。 - Chase
2个回答

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);

0
我会将键中的“/”去掉,然后按“/”分割并通过从结果中移除值来遍历树。例如,以下代码将创建完整路径(如果尚不存在),但如果已存在,则保留文件夹和内容。
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获取最终结果可能会更简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接