<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />此 JSL 文件包含用于转换的函数JSON文本到 JSL 数据结构或 JMP 数据表中。 JSON 表示嵌套的“数组”和“对象”的结构。 JSON 类型/值在 JSL 中表示如下:
| JSON | JSL | 笔记 |
|---|
| 大批 | 列表 | 值序列 |
| 目的 | 关联数组 | 命名值集 |
| 数字 | 数字 | |
| 细绳 | 细绳 | |
| 真的 | 1.0 | |
| 错误的 | 0.0 | |
| 无效的 | . | 缺失值 |
转换为 JMP 数据表时,名称代表列,数组值代表行。 非数组值被向下填充以匹配数组值。
主要功能
所有函数都在命名空间“JSON”中,以避免名称冲突其他功能。
dt = JSON:Make Table( json text | obj )
obj = JSON:Parse( json text )
示例数据
原始 JSON
{"region":"Europe",
"country":[
{"name":"France", "population":66.1},
{"name":"Germany", "population":80.8}
]
}
转换后的 JSL
Associative Array(
{{"country", {
["name" => "France", "population" => 66.1],
["name" => "Germany", "population" => 80.8]
}},
{"region", "Europe"}}
)
请注意,不会保留集合元素的顺序。 它在 JMP 中变为字母顺序。
可以使用普通的 JSL 下标访问已解析对象的值。 例如,如果数据保存上面的解析结果,您可以通过以下方式访问它:
data["country"][1]["name"]; // "France"
转换后的数据表
| 国家的名字 | 国家.人口 | 地区 |
|---|
| 法国 | 66.1 | 欧洲 |
| 德国 | 80.8 | 欧洲 |
请注意,区域值会重复。
实施说明
请将问题报告给文件交换讨论或xan.gregg@jmp.com .
更新: 我也附上了 Craige 的JSON 解析器 II.jsl ,这是一个快得多的 JSON Parser.jsl 版本。
聪明的代码 Xan,使用一个 JSL 列表作为堆栈来处理嵌套的 JSON 结构是个好主意。
使用模式匹配进行快速 JSON 解析代码的更快变化,仍然没有经过很好的测试。
感谢您指出插入函数,这是拼图的重要部分。