类对象->json过程中的问题
客户端与服务器之间通信一般都是以JSON对象形式,但是js中都是以对象方式存储,当要把对象转化为JSON形式的时候,直接给这个对象赋某个属性和值之后没有办法在转化后的JSON中找到,如何解决呢?
问题描述
问题是不是没看太明白,举个例子吧。现在得到了一个名为art的对象,但现在需要的数据是art对象里的数据加上一个index数据。首先想到的应该是 直接art.index = index
将该属性放到art上,但是这样之后转化得到的JSON数据里并没有index属性和值,为什么?
- 其实在对象转json中,存在一个属性能否序列化的问题,由于js对象可以比较复杂,不仅仅只有数据属性值,还可能有函数 或者嵌套对象,所以对象中并不是所有东西 在转化为json之后都还能找到
- 实际上在对象里,只有dataValues这样一个属性底下的值可以序列化(也就是转化为json之后能看到),那么解决方案就出来了!
解决方案1.0
若要给对象添加可以序列化的值,要用 art.dataValues.index = index
存在的问题
注意,这时在看完源码,知道只有dataValues这个下面的值会被序列化,其实这种方法非常不好。
- js是一门动态语言,从es6开始支持类了,但是它并不像Java、C++等语言一样存在私有变量的概念,js类中都是公开的,都是从外界可以直接访问并且修改的
- 这样就产生了一个很大的问题,类中的数据成员对外界来说丝毫没有隐私性可言,都是直接可以被操控修改的数据,所以最好不要用1.0的解决方式
- 那用什么?用类中的自制的函数来修改自己的变量成员就很安全,基于这种方式 就有了解决方案2.0
解决方案2.0
利用内置函数来对私有变量进行修改,而不是直接在变量身上进行操作,也就是调用内置的setDataValue(key, value),安全。