JSON
函数以文本形式返回数据结构的 JavaScript 对象表示法 (JSON) 表示形式,从而适合在网络上存储或传输。 [ECMA-404](
https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
和
IETF RFC 8259
介绍了此格式,其已被 JavaScript 和其他编程语言广泛使用。
画布应用支持此表列出的
数据类型
,并提供有关其文本表示的详细信息:
包含颜色的 8 位十六进制表示形式的字符串。 此表示形式采用格式 #
rrggbbaa
,其中
rr
是红色分量,
gg
是绿色,
bb
是蓝色,
aa
是 Alpha 通道。 对于 Alpha 通道,
00
是完全透明,
ff
是完全不透明。 您可以将此字符串传递到
ColorValue
函数。
"#102030ff"
为用户语言使用适当的小数点分隔符的数字。 如果需要,将使用科学计数法。
1.345
包含 ISO 8601
yyyy-mm-dd
格式的日期的字符串。
"2019-03-31"
DateTime
包含 ISO 8601 日期/时间的字符串。 以 UTC 表示的日期/时间值,如结尾的“Z”所示。
"2019-03-31T22:32:06.822Z"
包含 GUID 值的字符串。 字母为小写。
"751b58ac-380e-4a04-a925-9f375995cc40"
图片,媒体
如果指定了
JSONFormat.IncludeBinaryData
,媒体文件将以字符串编码。 使用 http: 或 https: URL 架构的 Web 引用不会被修改。 对内存中二进制数据的引用以
"data:
mimetype
;base64,..."
格式编码。 内存中数据包括用户使用
Camera
控件捕获的图像,以及具有 appres: 和 blob: URL 架构的任何其他引用。
"data:image/jpeg;base64,/9j/4AA..."
为用户语言使用适当的小数点分隔符的数字。 如果需要,将使用科学计数法。
1.345
选择项的数字值,不是用于显示的标签。 使用数字值是因为它与语言无关。
包含 ISO 8601
hh:mm:ss.fff
格式的字符串。
"23:12:49.000"
字段及其值的逗号分隔列表,放在
{
和
}
之间。 此表示法类似于画布应用中的记录,但名称始终在双引号之间。 此格式不支持基于多对一关系的记录。
{ "First Name": "Fred", "Age": 21 }
记录的逗号分隔列表,放在
[
和
]
之间。 此格式不支持基于一对多关系的表。 使用
JSONFormat.FlattenValueTables
选项,删除列名为
Value
的单列表的记录。
[ { "First Name": "Fred", "Age": 21 }, { "First Name": "Jean", "Age": 20 } ]
双选项的布尔值(
true
或
false
),不是用于显示的标签。 使用布尔值是因为它与语言无关。
false
超链接,文本
双引号之间的字符串。 此函数用反斜杠转义嵌入的双引号,将换行符替换为“\n”,并进行其他标准 JavaScript 替换。
"This is a string."
指定可选的
Format
参数来控制结果的可读程度,以及不支持的数据类型和二进制数据类型的处理方式。 默认情况下,输出尽可能紧凑,没有不必要的空格或换行符,并且不允许不支持的数据类型和二进制数据。 如果您指定了
&
运算符,可以组合多种格式。
JSONFormat 枚举
Description
使用
ShowColumns
和
DropColumns
函数可控制结果包含哪些数据并删除不支持的数据类型。
由于
JSON
可能既占用内存又需要大量计算,因此只能在
行为函数
中使用此函数。 您可以将结果从
JSON
捕获到
变量
,然后将其用于数据流。
如果列同时有显示名称和逻辑名称,结果将包含逻辑名称。 显示名称反映应用用户的语言,因此不适合将数据传输到通用服务。
JSON(
数据结构
[,
格式
])
DataStructure
–必需。 要转换为 JSON 的数据结构。 支持表、记录和基元值,任意嵌套。
格式
- 可选。
JSONFormat
枚举值。 默认值为
JSONFormat.Compact
,不添加换行符或空格,阻止二进制数据和不支持的列。
插入
Button
控件,并将其
OnSelect
属性设置为以下公式。
ClearCollect( CityPopulations,
{ City: "London", Country: "United Kingdom", Population: 8615000 },
{ City: "Berlin", Country: "Germany", Population: 3562000 },
{ City: "Madrid", Country: "Spain", Population: 3165000 },
{ City: "Hamburg", Country: "Germany", Population: 1760000 },
{ City: "Barcelona", Country: "Spain", Population: 1602000 },
{ City: "Munich", Country: "Germany", Population: 1494000 }
ClearCollect( CitiesByCountry, GroupBy( CityPopulations, "Country", "Cities" ) )
按住 Alt 键,并选择此按钮。
CitiesByCountry 集合已使用此数据结构创建,您可以通过在文件菜单上选择集合,然后选择集合的名称来显示该集合。
Set( CitiesByCountryJSON, JSON( CitiesByCountry ) )
此公式将全局变量 CitiesByCountryJSON 设置为 CitiesByCountry 的 JSON 表示形式。
按住 Alt 键,并选择此按钮。
插入 Label 控件,然后将 Text 属性设置为此变量。
CitiesByCountryJSON
标签将显示此结果,所有结果都在一行中,没有空格,适合跨网络传输:
"Cities": [{ "City": "London", "Population": 8615000 }],
"Country": "United Kingdom"
"Cities": [
{ "City": "Berlin", "Population": 3562000 },
{ "City": "Hamburg", "Population": 1760000 },
{ "City": "Munich", "Population": 1494000 }
"Country": "Germany"
"Cities": [
{ "City": "Madrid", "Population": 3165000 },
{ "City": "Barcelona", "Population": 1602000 }
"Country": "Spain"
更改第二个按钮的公式,使输出更具可读性。
Set( CitiesByCountryJSON, JSON(CitiesByCountry, JSONFormat.IndentFour ))
按住 Alt 键,并选择第二个按钮。
标签将显示可读性更强的结果。
"Cities": [
"City": "London",
"Population": 8615000
"Country": "United Kingdom"
"Cities": [
"City": "Berlin",
"Population": 3562000
"City": "Hamburg",
"Population": 1760000
"City": "Munich",
"Population": 1494000
"Country": "Germany"
"Cities": [
"City": "Madrid",
"Population": 3165000
"City": "Barcelona",
"Population": 1602000
"Country": "Spain"
添加 Image 控件。
这个控件带有 SampleImage。
添加 Button 控件,并将其 OnSelect 属性设置为以下公式。
Set( ImageJSON, JSON( SampleImage, JSONFormat.IncludeBinaryData ) )
按住 Alt 键,并选择此按钮。
添加一个标签,然后将 Text 属性设置为此变量。
ImageJSON
调整控件的大小,并根据需要减小字体大小,以显示大部分结果。
标签将显示 JSON 函数捕获的文本字符串。
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIg0KCSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczphPSJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlU1ZHVmlld2VyRXh0ZW5zaW9ucy8zLjAvIg0KCSB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjI3MHB4IiBoZWlnaHQ9IjI3MHB4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNzAgMjcwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCgk8ZyBjbGFzcz0ic3QwIj4NCgkJPHJlY3QgeT0iMC43IiBmaWxsPSIjRTlFOUU5IiB3aWR0aD0iMjY5IiBoZWlnaHQ9IjI2OS4zIi8+DQoJCTxwb2x5Z29uIGZpbGw9IiNDQkNCQ0EiIHBvaW50cz0iMjc3LjksMTg3LjEgMjQ1LDE0My40IDE4OC42LDIwMi44IDc1LDgwLjUgLTQuMSwxNjUuMyAtNC4xLDI3MiAyNzcuOSwyNzIiLz4NCgkJPGVsbGlwc2UgZmlsbD0iI0NCQ0JDQSIgY3g9IjIwMi40IiBjeT0iODQuMSIgcng9IjI0LjQiIHJ5PSIyNC4zIi8+DQoJPC9nPg0KPC9zdmc+"
Value 表
JSON( [1,2,3] )
生成文本字符串 [{"Value":1},{"Value":2},{"Value":3}]。
JSONFormat.FlattenValueTables 选项也是同样的公式:
JSON( [1,2,3], JSONFormat.FlattenValueTables )
生成文本字符串 [1,2,3]。
请注意,在对 CityPopulations 或 CitiesByCountry 集合使用 JSON 时,FlattenValueTables 选项没有任何影响,因为这些表不是 Value 表。 Value 表只有一列,必须命名为“Value”。