我正在使用 Chrome 的原生 JSON.stringify 序列化相当复杂的数据结构(稍后将切换到一些序列化库以获得跨浏览器支持)。大多数数据可以看作是静态的,但有些是动态的。
在构建数据时,我希望能够做类似的事情
var dynamicString=new String();
{a:"foo", b:dynamicString}
然后稍后设置 dynamicString 的原始字符串值。我想这样做而不是更改该对象的属性“b”,因为这样可以更轻松地构造这些数据。即类似的东西:
我已经发现不能更改字符串对象的原始值。我还发现 valueOf-function 可以设置为自定义函数,并且通过在该函数中返回所需的值,如果执行以下操作基本上可以实现:
var dynamicString=new String("bar");
a.valueOf=function(){return ("foo")};
alert (a+"bar");//foobar
问题是序列化显然不使用 valueOf 函数。在这种情况下,对动态字符串对象进行序列化会将“bar”放入 JSON.stringify 返回的字符串中,而不是所需的“foo”。
获得我所追求的一种方法是在序列化之前递归循环遍历数据结构的所有对象,并用它们返回的原始值替换动态数据对象。但如果可能的话,我想避免这种情况。
有什么建议么?
编辑:我当然也可以在数据中放置一个对象,我也可以参考。然后我可以“动态地”设置该对象的数据,这将反映在结果字符串中。但这增加了结构的另一个层次。我只想要一个字符串,而不是具有字符串属性的对象。