我想用 Amber(在线 IDE)将 OrderedCollection 存储在 Web 浏览器的 localStorage 中,然后再检索它。
创建测试数据对象
| 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.
在 localStorage 中存储测试数据对象
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.
取回存储的值
以下的printIt
localStorage getItem: 'coll'
给
'["abc","xon",{"en":"English","fr":"French","ge":"German"}]'
这是一个 JSON 字符串。
如何取回 OrderedCollection coll?
使用浏览器内置的 JSON 解析器
JSON parse: (localStorage getItem: 'coll')
打印的结果是
an Array ('abc' 'xon' [object Object])
和
(JSON parse: (localStorage getItem: 'coll')) class
是
Array
数组的第三个元素
((JSON parse: (localStorage getItem: 'coll')) at: 3) class
是一个
JSObjectProxy
问题
如何取回任意 JSON 对象(包含 JavaScript 数组和对象、OrderedCollections 和 HashedCollections、Smalltalk 中的字典)的 Smalltalk 表示?
笔记
JSON 建立在两种结构之上:
- 名称/值对的集合。在各种语言中,这被实现为对象、字典、哈希表或关联数组。
- 值的有序列表。在许多语言中,这被实现为数组、列表或序列。