公式
公式是一个XQuery 3.1表达式,它生成输出(节点集或计算结果),在JSON网格视图中显示。例如,在下方截图中,计算了从第一项到第四项的总价格,并将结果(28)显示在单独的行中。每个公式都独立执行,不会受文档中其他过滤器或公式的影响。
有关为JSON文档创建XQuery表达式的信息,请参见针对JSON的XQuery表达式部分。
提示: | 在网格视图中输入过滤器的表达式和公式时,您可能希望表达式显示在多行上,从而便于阅读。要在表达式中添加一个新行,请按Ctrl+Enter。 |
如果文档是JSON5或JSONC文档,则:
•公式将作为JSON注释写入文档。
•公式的输出可以作为(非注释的)代码存储在JSON文档中(可选)。为此,请单击公式的磁盘图标(参见下方截图)。如果公式没有被储存为JSON内容,则它将仅被储存为文档元数据,以在网格视图中显示。请注意,磁盘图标仅在JSON5和JSONC文档中可用;它不显示在其他类型的JSON文档中。
请注意,公式存储为JSON注释,而公式结果直接存储为JSON代码。下面的代码(包含已存储的公式输出结果)是单击了该公式的磁盘图标后的结果。
{ "receiptID": "123-456-7890", "paymentMethod": "Cash", "items": [ { "itemID": "1", "displayName": "Milk", "price": 1, "quantity": 3 }, { "itemID": "2", "displayName": "Yogurt", "price": 2, "quantity": 2 }, { "itemID": "3", "displayName": "Chocolate 85%", "price": 1, "quantity": 1 }, { "itemID": "4", "displayName": "Fancy Wine", "price": 20, "quantity": 1 } ], //(:altova_xq_embed:)totalPrice(:altova_xq_key:)sum(for \$item in ?items?* return \$item?price * \$item?quantity) "totalPrice": 28 //(:altova_xq_end:) } |
在上方截图中,使用了公式对序列中的成员进行了求和。每个成员都是items数组中包含的每个对象的price和quantity值的乘积。选择每个对象并依次将其分配给\$item变量的迭代方式是for \$item in ?items?*。请注意,此时上下文节点是公式的父节点,因此也是items节点的父节点。每个乘积都是通过查找当前在\$item变量中的对象的price和quantity子节点并将这两个值相乘来获得的。通过这种方式得到的乘积是序列的成员,然后将它们相加得出总价格。
创建公式
要创建公式,请执行以下操作:
1.选择想要添加公式的节点,作为同级或子级。右键单击,然后添加同级或子级(根据需要)在决定您想要公式出现的位置(作为同级或子级)时,请注意,公式的XQuery表达式的上下文节点将是该公式的父节点。例如,在上方截图中显示的XQuery表达式中,上下文节点是公式(totalPrice))及其同级(items数组)的父节点。要创建上方截图中的公式,请将同级节点追加到items 数组(参见下方截图)。
2.将节点的类型更改为公式(参见下方截图)。
3.双击包含f(x)图标的单元格并输入公式的名称(参见下方截图)。如果文档是JSON5或JSONC文档,则会显示磁盘图标。单击该图标将公式的输出保存到文档中。
4.在默认情况下,XQuery表达式是字符串'XQuery’,因此输出将是字符串XQuery(显示在表达式下方的单元格中)。双击表达式的单元格、输入表达式并单击Enter键来输入XQuery表达式。这将计算该公式并显示其结果。其他公式将不会被修改。
5.如果在文档中有多个公式,单击JSON | 全部重新计算菜单命令以更新所有公式的结果。此命令在文档中的公式查找动态变化的数据时(例如,汇率)会尤其有用。
请注意有关公式的以下几点:
•公式的XQuery表达式的上下文节点是公式节点的父节点。
•公式存储在文档的元数据中(位于特殊应用程序范围的JSON元数据文件中)。如果文档是JSON5或JSONC,则公式将被额外保存为JSON内容中的注释。
•由公式生成的输出显示在公式的XQuery表达式下方的单元格中。对于JSON5和JSONC,可以通过单击XQuery表达式旁边的磁盘图标将输出存储在文档中。无论是否单击磁盘图标都会计算公式的输出并将其存储在文档的元数据中。
公式输出尚未保存到JSON内容;单击进行保存。仅在JSON5和JSONC中。 | |
公式输出已保存到JSON内容;单击不进行保存。仅在JSON5和JSONC中。 |
•当输出作为计算结果存储在内容中时,它被存储为属性,该属性具有您分配给公式的名称。例如,在上述的totalPrice公式中,输出将按以下形式存储:"totalPrice": 28。
•请注意以下区别:在JSON5和JSONC文档中,公式作为JSON注释保存,它们的输出作为JSON属性保存。
提示: | 在JSON网格视图设置对话框中,您可以指定是否将公式存储在JSON5和JSONC文档中。在文档中存储公式是默认选项。 |
提示: | 在JSON网格视图设置对话框中,您还可以指定元数据选项(是将公式自动存储在元数据文件中、还是仅在请求时存储,或不存储)。 |
表格中的公式
如果表格列的所有单元格(在表格显示中)包含相同的公式,则该公式将仅显示在列标题中(参见下方截图)。但是,公式的计算结果将显示在相应的单元格中。
列标题中的公式是一种网格视图的表示方式。在JSON文档内容中(在文本视图中),公式会针对每个表格行项重复。
重新计算所有公式
要更新文档中所有公式的结果,请单击JSON | 全部重新计算菜单命令。
相关操作的流程
•根据以下步骤将新的空列添加到表格:从表格显示切换到列表显示,在表格显示中右键单击任何一个key:value对 ,然后通过数据项的上下文菜单追加或插入一个新的key:value对。当切换回表格显示时,为已追加/插入的新key:value对创建一个新列。您现在可以在网格视图中编辑该列。
•如果一个表格列的所有公式都是相同的,所以公式出现在标题中,而您现在想要为某个单元格创建不同的公式,请切换到列表显示,然后编辑该单元格的公式。