* 仕様書

[REFS[
- [2] [CITE@en[Infra Standard]], [TIME[2021-03-23T13:32:29.000Z]], [TIME[2021-04-12T05:55:18.503Z]] <https://infra.spec.whatwg.org/>
-- [3] [CITE@en[Infra Standard]], [TIME[2021-03-23T13:32:29.000Z]], [TIME[2021-04-12T05:56:49.624Z]] <https://infra.spec.whatwg.org/#convert-a-json-derived-javascript-value-to-an-infra-value>
]REFS]

* データ型

[FIG(short list)[ [1] [CITE[Infra Standard]] の[[データ型]]
- [[バイト]]
- [[バイト列]]
- [[符号位置]]
- [[文字列]]
- [[リスト]]
- [[スタック]]
- [[キュー]]
- [[集合]]
- [[写像]]
]FIG]

* 型変換

[4] 
[DFN[[RUBYB[JSON派生JavaScript値をInfra値に変換][convert a JSON-derived JavaScript value to an Infra value]]]]するには、
[VAR[[[JavaScript値]]]]を、
次のようにします。
[SRC[>>3]]

[FIG(steps)[
= [5] [[Type]] ([VAR[JavaScript値]]) が [CODE[Null]],
[CODE[Boolean]],
[CODE[String]],
[CODE[Number]]
の場合、
== [6] 
[VAR[JavaScript値]]を返します。
= [7] 
それ以外で、
[CODE[IsArray]] ([VAR[JavaScript値]])
が[[真]]の場合、
== [8] 
[VAR[結果]]を、[[空]]の[[リスト]]に設定します。
== [9] 
[VAR[長さ]]を、
[[!]] [[ToLength]] ([[!]] [[Get]] ([VAR[JavaScript値]], [CODE[length]]))
の結果に設定します。
== [10] 
[[範囲]] [ [N[0]], [VAR[長さ]] - 1 ] の各[VAR[索引]]に[[ついて、順に][for each]]、
=== [11] 
[VAR[索引名]]を、
[[!]] [CODE[ToString]] ([VAR[索引]])
に設定します。
=== [12] 
[VAR[索引のJavaScript値]] を、
[CODE[!]] [CODE[Get]] ([VAR[JavaScript値]], [VAR[索引名]])
に設定します。
=== [13] 
[VAR[索引の基盤値]]を、
[VAR[索引のJavaScript値]]を
[[JSON派生JavaScript値をInfra値に変換]]した結果に設定します。
=== [14] 
[VAR[索引の基盤値]]を、
[VAR[結果]]の[[末尾に追加]]します。
== [15] 
[VAR[結果]]を返します。
= [16] 
それ以外の場合、
== [17] 
[VAR[結果]]を、
[[空]]の[[順序付き写像]]に設定します。
== [18] 
[CODE[!]] [VAR[JavaScript値]]の[F(ss)[OwnPropertyKeys]] () の各[VAR[鍵]]に[[ついて、順に][for each]]、
=== [19] 
[VAR[鍵のJavaScript値]]を、
[CODE[!]] [CODE[Get]] ([VAR[JavaScript値]], [VAR[鍵]])
に設定します。
=== [21] 
[VAR[鍵の基盤値]]を、
[VAR[鍵のJavaScript値]]を
[[JSON派生JavaScript値をInfra値に変換]]した結果に設定します。
=== [20] 
[VAR[結果]] [ [VAR[鍵]] ] を、
[VAR[鍵の基盤値]]に[[設定]]します。
== [22] 
[VAR[結果]]を返します。
]FIG]

[26] 
[[JSONをInfra値に構文解析]]する処理から呼び出されます。


* メモ

[23] [CITE@en[Add "parse JSON into Infra values"]]
([[domenic]], [TIME[2019-05-11 00:47:58 +09:00]], [TIME[2021-04-12T06:07:16.000Z]])
<https://github.com/whatwg/infra/commit/9bf763869b84aac00c8a1883ddb70485835ae861>

[24] [CITE@en[Add "parse JSON into maps and lists" by domenic · Pull Request #249 · whatwg/infra]]
([TIME[2021-04-12T06:08:04.000Z]])
<https://github.com/whatwg/infra/pull/249>

[25] [CITE@en[Add Boolean to JSON-to-Infra conversion steps]]
([[NotWoods]], [TIME[2019-10-10 02:18:39 +09:00]], [TIME[2021-04-12T06:47:38.000Z]])
<https://github.com/whatwg/infra/commit/fbe57e3bcc2730d8ecb96ef667a739aec92f91d4>

[27] [CITE@en[Boolean not listed in infra conversion steps · Issue #273 · whatwg/infra]]
([TIME[2021-04-12T06:48:58.000Z]])
<https://github.com/whatwg/infra/issues/273>

[28] [CITE@en[Add Boolean to conversion steps by NotWoods · Pull Request #275 · whatwg/infra]]
([TIME[2021-04-12T06:49:18.000Z]])
<https://github.com/whatwg/infra/pull/275>