完整Javascript对象的类似python的pickle
Python-like pickling of full Javascript objects
Javascript是否有任何序列化框架可以像Python pickle那样保留类和引用信息?也就是说,可以直接取一个继承类实例的原型(不只是json类的数据),并像这样序列化它::
// Somehow add serialization metadata to classes first
obj = new MyObject();
obj.referred = new MyObject2();
pickle = serializer.dump(obj) // Provides byte stream of the serialized object
序列化器可以处理
在pickle中编码类信息-由于存在不同的JS类系统,这应该以某种方式可定制
自动跟踪和序列化引用对象
提供钩子为值(日期是最常见的情况)添加自定义编码器/解码器
这将使复杂数据结构的内部存储和传输变得更加容易。我希望在游戏引擎中使用它。与pickle一样,如果没有原始Javascript代码提供类定义,数据的反序列化是不可能的。
Javascript已经有什么样的框架存在,或者我需要推出一个自定义系统?
它不完全适合,但你可以尝试使用occamsrazor.js。为此,可以使用JSON序列化:
// this is your costructor function
function Circle(attrs){
this.radius = attrs.radius;
}
Circle.prototype.area = function (){
return this.radius*this.radius*Math.PI;
}
Circle.prototype.perimeter = function (){
return 2*this.radius*Math.PI;
}
// this is a validator
function hasRadius(obj){
return radius in obj;
}
// this is your factory function
objFactory = occamsrazor().addContructor(hasRadius, Circle);
// this is your deserialized object
var json = '{"radius": 10}';
// circle now is a full fledged object
var circle = objFactory(JSON.parse(json));
缺点是不能像使用pickle那样获得对象的快照,而是重新创建一个新对象。但在某些情况下,它可能很方便。
你可能想看看hunterloftis/cryo。来自自述文件:
为node.js和浏览器构建。Cryo的灵感来自Python的pickle,其工作原理类似于JSON.stringify()和JSON.parse()。在这些情况下,cro .stringify()和cro .parse()改进了JSON:
- 定义
- 无限
- 对象引用
- 附加属性
- <
- DOM节点/gh>
在r/programming与作者进行了简短的讨论。
来源很简单,没有魔法。
我还没试过。
http://nanodeath.github.com/HydrateJS/(博客文章在http://blog.maxaller.name/2011/01/hydratejs-smarter-javascript-serialization)似乎符合您的一些要求,特别是通过https://github.com/nanodeath/HydrateJS/blob/master/spec/HydrateSpec.js
查看msgpack。虽然我没有将它用于JavaScript对象,但这个示例似乎暗示它将适用于对象,而不仅仅是json。额外的好处是:它是我用过的最快的序列化实现之一。
以下是一些:
杰森:完全披露:这是我做的。但我使用它,它是我最推荐的完整javascript序列化。使用这个库可能会比使用其他库少很多痛苦,如果它不能满足您的需求,我很乐意对库进行添加!原型/构造函数信息,对同一对象的多个引用,具有用于用户定义类型的钩子。保存原型的副本,除非你显式地将原型添加到"常量"列表中,在这种情况下,它在重建时使用已经存在的原型。具有json风格的替换器和引用对象的方法,这些对象将在解析时存在。序列化日期、RegExp、null、NaN、Infinity、-Infinity、函数、DOM元素、事件和普通对象。仍然不是一个经过尝试和测试的库,但如果它不适合你,你可以给我发电子邮件,我会尝试修复它。https://github.com/johnlarson/Jason
ResurrectJS:原型/构造函数信息,对同一对象的多个引用,没有钩子。使用'constructor'属性来获取构造函数,构造函数的命名空间有一定的限制,你可以使用自定义命名空间解析器来解决这个问题。具有json样式的替换。序列化Date, RegExp, DOM元素,NaN, Infinity, -Infinity和普通对象。比Jason更成熟,使用测试也更多,但更难正确使用。https://github.com/skeeto/resurrect-js
SnapShot:我还没试过这个。它看起来很有希望,但最后一次更新是在3年前。据我所知,它没有自动原型/构造函数信息,但它有一个钩子api,用于定义自定义序列化/反序列化行为,类似于JSON的toJSON和fromJSON。处理对同一对象的多个引用。据我所知,没有json风格的替代品。序列化日期、RegExp、null和函数。https://github.com/mixu/snapshot
JASON:另一个很有前途的库,我没有尝试过,上次更新是在3年前。我不知道它是否有原型/构造器。处理对同一对象的多个引用。据我所知,它没有钩子。我不知道它是否有json风格的替换。序列化"日期、regexp、布尔值等"answers"所有JS原语,包括undefined"。https://github.com/xk/JASONjs-yaml with dump(即dangerousDump)和load(即dangerousLoad)。我认为大多数语言都实现了YAML。
否则,您必须提供如何序列化/反序列化JSON。stringify (replacer)和JSON。解析(兴奋剂)。
我做了一个基于https://github.com/patarapolw/any-serialize的库,并测试了日期,RegExp, Set,函数,类构造函数,Infinity, NaN, BigInt, Symbol, Undefined。
对于自定义Class实例,您必须提供how-to。
- 从桌面读取python文件时高亮显示代码
- python-selenium-点击上升链接
- python到“;流“;字典处理
- 什么's本地node.js服务器和python简单http服务器之间的区别
- Meteor如何运行服务器端python脚本
- 回调函数在python代码中离线
- 将数组从ajax传递到python(Tornado)
- 为什么在python中使用异常比javascript更容易接受
- 如何让Meteor应用程序使用python脚本写入数据库
- 如何访问Web2py'中python代码中的JavaScript变量;s视图
- 如何在python中将JavaScriptHTML渲染为HTML
- 在python中,我如何才能恢复被隐藏的元素的内容
- 用beautifulsoup-python调用onclick事件
- Python在spark中绘制地图
- 使用.format在一些HTML代码中插入文本,会出现错误(Python)
- 在selenium python中执行脚本
- 调用Javascript中的Python函数,读取静态文件(Flask)
- 使用bokeh/flexx-pyscript在Python 3.5中绘制交互式浏览器
- 如何在 Python 中使用 Appengine 读取和写入文件
- 完整Javascript对象的类似python的pickle