Amber 和本地存储,asJSON?

Posted

技术标签:

【中文标题】Amber 和本地存储,asJSON?【英文标题】:Amber and localstorage, asJSON? 【发布时间】:2014-05-01 12:15:47 【问题描述】:

我想用 Amber (on-line 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 字符串。

我如何取回 OrderedCollectioncoll

使用浏览器内置的 JSON 解析器

JSON parse: (localStorage getItem: 'coll')

printIt 的结果是

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 表示?

注意

http://www.json.org

JSON 建立在两种结构之上:

名称/值对的集合。在各种语言中,这被实现为对象、字典、哈希表或关联数组。 值的有序列表。在许多语言中,这被实现为数组、列表或序列。

【问题讨论】:

【参考方案1】:

  SmalltalkImage current readJSObject: 
            (JSON parse: (localStorage getItem: 'coll'))  

回馈

    an Array ('abc' 'xon' a Dictionary ('en' -> 'English' , 'fr' -> 'French' , 'ge' -> 'German')) 

评论

(JSON parse: (localStorage getItem: 'coll'))  

提供一个 JSProxyObject,然后通过 #readJSObject: 方法将其转换为 Amber 对象。此方法只是将调用重定向到底层 JavaScript 方法。

【讨论】:

注意:在 Amber 的早期版本中,#readJSObject: 被称为 #readJSON:

以上是关于Amber 和本地存储,asJSON?的主要内容,如果未能解决你的问题,请参考以下文章

Web本地存储和小程序本地存储的区别

本地存储和 JSON

本地存储(Local Storage) 和 会话存储(Session Storage)

iOS开发怎么获取本地数据和把数据存储到本地

vue3.0 监听本地存储

原生JavaScript实现本地存储(localStorage)和会话存储(sessionStorage)