1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
use eco_format;
use Spanned;
use crate;
use crateEngine;
use crate;
use crate;
/// Reads structured data from a JSON file.
///
/// The file must contain a valid JSON value, such as object or array. The JSON
/// values will be converted into corresponding Typst values as listed in the
/// [table below](#conversion).
///
/// The function returns a dictionary, an array or, depending on the JSON file,
/// another JSON data type.
///
/// The JSON files in the example contain objects with the keys `temperature`,
/// `unit`, and `weather`.
///
/// # Example
/// ```example
/// #let forecast(day) = block[
/// #box(square(
/// width: 2cm,
/// inset: 8pt,
/// fill: if day.weather == "sunny" {
/// yellow
/// } else {
/// aqua
/// },
/// align(
/// bottom + right,
/// strong(day.weather),
/// ),
/// ))
/// #h(6pt)
/// #set text(22pt, baseline: -8pt)
/// #day.temperature °#day.unit
/// ]
///
/// #forecast(json("monday.json"))
/// #forecast(json("tuesday.json"))
/// ```
///
/// # Conversion details { #conversion }
///
/// | JSON value | Converted into Typst |
/// | ---------- | -------------------- |
/// | `null` | `{none}` |
/// | bool | [`bool`] |
/// | number | [`float`] or [`int`] |
/// | string | [`str`] |
/// | array | [`array`] |
/// | object | [`dictionary`] |
///
/// | Typst value | Converted into JSON |
/// | ------------------------------------- | -------------------------------- |
/// | types that can be converted from JSON | corresponding JSON value |
/// | [`bytes`] | string via [`repr`] |
/// | [`symbol`] | string |
/// | [`content`] | an object describing the content |
/// | other types ([`length`], etc.) | string via [`repr`] |
///
/// ## Notes
/// - In most cases, JSON numbers will be converted to floats or integers
/// depending on whether they are whole numbers. However, be aware that
/// integers larger than 2<sup>63</sup>-1 or smaller than -2<sup>63</sup> will
/// be converted to floating-point numbers, which may result in an
/// approximative value.
///
/// - Bytes are not encoded as JSON arrays for performance and readability
/// reasons. Consider using [`cbor.encode`] for binary data.
///
/// - The `repr` function is [for debugging purposes only]($repr/#debugging-only),
/// and its output is not guaranteed to be stable across Typst versions.