我需要它,因为我最近创建了一个应用程序,将包含所有用户生成数据的对象保存到localStorage
,并使用JSON
对其进行编码/解码。
奇怪的是,由于某些原因,Internet Explorer对JSON(“JSON未定义”)的支持很差,如果不是零的话,我不会尝试重新创建整个函数。 / p>
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
}
这是我的第一次尝试,但我忘记了对象里面有其他对象,它们本身包含对象,并且一直出现错误,这个错误基本上源于尝试调用Object的方法String.prototype.replace()
。
由于当时我的代码是OCD,我实际上确实在源代码中保存了对象的结构:
/*
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,
...
}
*/
这是基本数据结构,...
代表重复模式。
这整个问题令人厌恶,但我想至少尝试修复我为设计糟糕的数据结构编写的令人烦恼的文档,以便它更加连贯:
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支持,并从头开始完全重新设计应用程序;新版本托管here。它可以与开箱即用的IE9配合使用!
答案 0 :(得分:4)
我认为这是最好的替代品:http://bestiejs.github.com/json3/
它声称比Crockford的JSON 2更好,原因如下(来自他们的网站):
JSON 3 ...
与JSON 2相比,JSON 3没有......
答案 1 :(得分:2)
答案 2 :(得分:1)
我认为你应该使用json2.js库: https://github.com/douglascrockford/JSON-js