6

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 

配列の 3 番目の要素

((JSON parse: (localStorage getItem: 'coll')) at: 3) class

です

JSObjectProxy

質問

任意の JSON オブジェクト (JavaScript 配列とオブジェクト、OrderedCollection と HashedCollection、Smalltalk の辞書を含む) の Smalltalk 表現を取得するにはどうすればよいですか?

ノート

http://www.json.org

JSON は、次の 2 つの構造で構築されています。

  • 名前と値のペアのコレクション。さまざまな言語で、これはオブジェクト、辞書、ハッシュ テーブル、または連想配列として実現されます。
  • 値の順序付きリスト。多くの言語では、これは配列、リスト、またはシーケンスとして実現されます。
4

1 に答える 1

4

のprintIt

  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'))  

メソッド #readJSObject: によって Amber オブジェクトに変換される JSProxyObject を提供します。このメソッドは、呼び出しを基になる JavaScript メソッドにリダイレクトするだけです。

于 2014-04-23T04:32:36.473 に答える