我需要它,因为我最近制作了一个应用程序,该应用程序将包含所有用户生成数据的对象保存到localStorage
,并使用JSON
.
奇怪的是,由于某种原因,Internet Explorer 对 JSON 的支持很差,如果不是零的话(“JSON 未定义”),我无法尝试重新创建整个函数。
stringify:function(x){
y='{'
for(i in x){
reg=RegExp('\'','g')
y+=',\''+i.replace(reg,'\\\'')+'\':\''+x[i].replace(reg,'\\\'')+'\''
}
y=y.replace(',','')
y+='}'
return y
}
这是我的第一次尝试,但我忘记了该对象内部还有其他对象,这些对象本身包含对象,并且不断收到错误,该错误基本上源于尝试调用String.prototype.replace()
Object 的方法。
由于当时我的代码有点强迫症,实际上我确实在源代码中保存了对象的结构:
/*
Link Engine.data: Object: {
X: Object: { [Each is a Paradigm, contains links]
link.0:{
link:[link],
title:[title],
removed:[true/false],
starred:[true/false]
},
...
},
LSPAR: [Reserved] Object: { [Paradigm list and pointer contained here]
key:[key], (this controls X)
list:{
[listitem]:[listitem],
...
}
},
#CONFIG: [Reserved] Object: { [contains miscellaneous Config data]
property:boolean/number/string,
...
}
*/
那是基本的数据结构,...
代表一个重复的模式。
编辑 2019
这整个问题令人憎恶,但我想至少尝试修复我为设计不佳的数据结构编写的令人讨厌的文档,使其更加连贯:
Link {
string link
string title
boolean removed
boolean starred
}
Config {
...
/* Just has a bunch of arbitrary fields; not important */
}
WArray {
string... [paradigm-name]
/* Wasteful Array; an object of the form
* { "a":"a", "b":"b", ... }
*/
}
Paradigm { /* analogous to above "X: Object: {..." nonsense */
Link... [paradigm-name].[id]
/* each key is of the form [paradigm-name].[id] and stores a Link
* e.g. the first link in the "Example" paradigm would
* be identified by the key "Example.0"
*/
}
ParadigmList {
string key /* name of selected paradigm */
WArray list /* list of paradigm names */
}
LinkEngineData {
Paradigm... [paradigm-name]
ParadigmList LSPAR
Config #CONFIG /* actual field name */
}
希望现在您可以解析正在发生的事情。这个语法:
type... format
旨在传达该类型的对象type
多次出现,如数组,但它不是数组。因此,这些字段没有固定的名称,因此
format: [descriptor1]text[descriptor2]text...
使用格式代替实际的字段名称。当您尝试创建数据结构而不知道数据结构是什么时,就会发生这种情况。我确实在原始问题中相邻使用了“数据”和“结构”这两个词,但这纯属巧合。我并不是说“这是我使用的数据结构”;我的意思是“这是我的数据的结构”。
无论如何,这就是我今天的设计方式:
Link {
string url
string title
boolean starred
}
LinkGroup {
string name
Link[] links
}
Config {
... /* has whatever it needs to have */
}
Data {
int selGroup
LinkGroup[] groups
Config config
}
就这些。
如果有人拥有实际 JSON.stringify 函数的源代码,或者知道复制它的方法,那么请给出您的答案。
编辑(2013 年,可能)
我最终放弃了 IE 支持并从头开始重新设计应用程序;新版本托管在这里。它适用于开箱即用的 IE9!