最近、ユーザーが生成したすべてのデータを含むオブジェクトをに保存し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()
オブジェクトのメソッドを呼び出そうとしたことに起因するエラーが発生し続けました。
当時、私は自分のコードでちょっと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,
...
}
*/
これが基本的なデータ構造で...
あり、繰り返しパターンを表しています。
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で動作します!