在使用JSON.stringify后正确地存储在文件中
Store in a file properly after using JSON.stringify
这段代码:
function item(name, number){
this.name = name;
this.number = number;
}
var item1 = new item('a',1);
var item2 = new item('b',2);
var box1 = [item1,item2];
console.log(box1);
var box2 = JSON.stringify((box1), null, 2);
console.log(JSON.parse(box2));
我得到了输出:
[ item { name: 'a', number: 1 }, item { name: 'b', number: 2 } ]
[ { name: 'a', number: 1 }, { name: 'b', number: 2 } ]
当我试图将box1
存储在具有fs.writeFile(filePath, data,...);
的文件中时,我使用node得到的结果与第二行相同。
是否有办法把第一个放到json文件中?
简短的回答是:不会自动。JSON不会自动保存对象的prototype
。
你可以这样做,但是你必须自己用一小段代码来处理它。
长答案w/code
在第一个输出[ item {} ]
中,item
是Node告诉您对象原型是什么的方式。
不幸的是,当您在对象上调用JSON.stringify
时,这一点信息将丢失,并且所有的item
将成为普通对象。因此,当解析它们返回时,Node不知道这些item
应该与new item()
一起创建,就像它们最初一样。
"保留"类型的一种快速方法是在每个对象中添加一个新属性,"提示"原型应该是什么,并在解析时显式处理:
function item(name, number){
this.name = name;
this.number = number;
// prototype hint
this._prototype = "item";
}
var item1 = new item('a',1);
var item2 = new item('b',2);
var box1 = [item1,item2];
console.log(box1);
var box2 = JSON.stringify((box1), null, 2);
// now map over the items
var parsed = JSON.parse(box2);
var mapped = parsed.map(function(object) {
if (object._prototype === "item") {
return new item(object.name, object.number);
}
return object;
});
console.log(mapped);
如果您需要更强大的东西,您可以通过将toJSON
和fromJSON
方法添加到item
类来扩展此想法,然后在从JSON映射到<->时调用这些方法。
除非编写自己的序列化器,否则不行。幸运的是,一个简单的JSON序列化并不难编写,尽管您必须为使用非标准JSON格式编写解析器将会令人沮丧。
但是,我怀疑这是一个你实际上不想要的情况。JSON是一种与语言无关的数据序列化格式。它存储可以用语言的自然形式表示的数据。在Javascript中,这通常是对象字面量。在Java或。它将是类(pojo/POCOs)。在其他语言中,地图或字典。在对象中包含对象原型的名称,将数据绑定到可能会更改的特定实现。突然间,您甚至不能重命名item函数。这是你不需要的限制。
- 使用ajax下载与存储名称不同名称的文件
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- gcloud节点-我如何确保通过签名URL上传到谷歌云存储的文件是公开可读的
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 在webView上加载本地存储的文件时延迟
- 如何从 Django 浏览本地文件并存储文件信息
- 正在从本地windows存储文件夹读取js中的文件
- 在 Java 中使用 IE/Chrome HTML 渲染器或使用 JavaScript 存储文件
- 在 PhantomJS 中自动删除本地存储文件
- 使用 gridfs 和 mongoose 在 MongoDB 中存储文件
- 如何使用 JavaScript 在浏览器中存储文件
- PhoneGap 如何在本地文件系统中存储文件
- HTML5上传没有't在服务器上存储文件
- 在智能手机上本地存储文件路径/图像,稍后上传
- 如何使用html和java脚本在windows azure移动服务中存储文件(简历)
- 我可以在内存中存储文件吗?node . js
- “拯救As"angular应用中的HTML5本地存储文件
- 移动应用程序的dropbox api是否使用本地dropbox文件夹来获取和存储文件
- 使用 gridFS 在 mongoDB 中存储文件(图像)
- Filepicker.IO -选择导出目的地后上传/存储文件