z--*_*z-- 6 json smalltalk local-storage amber-smalltalk
我想在Web浏览器的localStorage中存储Amber(在线IDE)和OrderedCollection,然后检索它.
| coll hcoll |
coll := OrderedCollection new.
coll add: 'abc'.
coll add: 'xon'.
hcoll := HashedCollection new.
hcoll at: 'en' put: 'English'.
hcoll at: 'fr' put: 'French'.
hcoll at: 'ge' put: 'German'.
coll add: hcoll.
Run Code Online (Sandbox Code Playgroud)
localStorage是浏览器中的键值存储.值必须是字符串.
localStorage setItem: 'coll' value: coll asJSONString.
"We set coll to nil to indicate that we
are going to retrieve it back from the localStorage"
coll := nil.
Run Code Online (Sandbox Code Playgroud)
以下的printIt
localStorage getItem: 'coll'
Run Code Online (Sandbox Code Playgroud)
给
'["abc","xon",{"en":"English","fr":"French","ge":"German"}]'
Run Code Online (Sandbox Code Playgroud)
这是一个JSON字符串.
如何取回OrderedCollection coll?
使用浏览器中内置的JSON解析器
JSON parse: (localStorage getItem: 'coll')
Run Code Online (Sandbox Code Playgroud)
printIt的结果是
an Array ('abc' 'xon' [object Object])
Run Code Online (Sandbox Code Playgroud)
和
(JSON parse: (localStorage getItem: 'coll')) class
Run Code Online (Sandbox Code Playgroud)
是
Array
Run Code Online (Sandbox Code Playgroud)
数组的第三个元素
((JSON parse: (localStorage getItem: 'coll')) at: 3) class
Run Code Online (Sandbox Code Playgroud)
是一个
JSObjectProxy
Run Code Online (Sandbox Code Playgroud)
如何获取任意JSON对象的Smalltalk表示(包含JavaScript数组和对象,OrderedCollections和HashedCollections,Smalltalk中的字典)?
JSON基于两种结构:
打印出来的
SmalltalkImage current readJSObject:
(JSON parse: (localStorage getItem: 'coll'))
Run Code Online (Sandbox Code Playgroud)
回馈
an Array ('abc' 'xon' a Dictionary ('en' -> 'English' , 'fr' -> 'French' , 'ge' -> 'German'))
Run Code Online (Sandbox Code Playgroud)
评论
(JSON parse: (localStorage getItem: 'coll'))
Run Code Online (Sandbox Code Playgroud)
给出一个 JSProxyObject,然后通过方法 #readJSObject: 将其转换为 Amber 对象。此方法只是将调用重定向到底层 JavaScript 方法。
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |