JAC(JSON as CSV)格式转换
jac-format的Python项目详细描述
JAC(JSON as CSV)格式
JAC格式使转换JSON和CSV文件格式变得容易,同时给应用程序开发人员很大的灵活性,可以定制为最终用户修改CSV文件的容易程度。任何JSON对象都可以表示为jacsv。在
.jac.csv
文件始终是有效的csv。在
下面是一个JAC文件示例:
path | . | name | dogs.0 | dogs.1 |
---|---|---|---|---|
myName | John | |||
friends.0 | Stacy | Rufus | ||
friends.1 | Paul | Mr. Fluffs | Whimpers |
当此文件转换为JSON时,它将变为:
{"myName":"John","friends":[{"name":"Stacy","dogs":["Rufus"]},{"name":"Paul","dogs":["Mr. Fluffs","Whimpers"]}]}
使用Javascript
npm install jac-format
使用Python
pip install jac_format
importjac_formatasjaccsv_string=jac.to_csv({"fruit":[{"name":"apple"},{"name":"lemon"}],},rows=["fruit.0","fruit.1"],columns=["name"])# > csv_string# "path,name\r\nfruit.0,apple\r\nfruit.1,lemon"# ┌───┬───────────┬─────────┐# │ │ A │ B │# ├───┼───────────┼─────────┤# │ 1 │ 'path' │ 'name' │# │ 2 │ 'fruit.0' │ 'apple' │# │ 3 │ 'fruit.1' │ 'lemon' │# └───┴───────────┴─────────┘jac.to_json(csv_string)# { "fruit": [{ "name": "apple" }, { "name": "lemon" }] }
规则
- JAC CSV文件有效RFC4180 CSVs
jac_csv_path
或{}是第一列,第一个细胞 - 第一列包含第一个路径段(除了
jac_csv_path
单元) - 第一行(标题)包含第二个路径段(除了
jac_csv_path
单元格) - JAC CSV的每个值单元可以是
- 在
- 空牢房
- 在
- 一根绳子
- 在
- JSON对象
- 在
- 空
- 在
- 一个数字
- 在
- JSON数组
- 在
- “路径”列右侧的列按从左到右的顺序应用。每行创建一个对象。然后将该对象设置在第一列的路径上。在
- 路径可以用方括号表示法或点表示法遍历
- 在点表示法中,数字的用法表示数组的索引(
a["1"].0
相当于a["1"][0]
) - 如果数组有未定义的值,则这些值将设置为
null
- 值单元格的路径是通过获取行的最左边的单元格(在“路径”列中)并将最上面的标题附加到该单元格中来构造的
带“*”的自动索引
自动索引使添加和删除行更容易,因为索引号不需要调整。在
这些表在转换为JSON时是等效的:
^{tb2}$path | . | name | dogs.0 | dogs.1 |
---|---|---|---|---|
myName | John | |||
friends.0 | Stacy | Rufus | ||
friends.1 | Paul | Mr. Fluffs | Whimpers |
如果“*”替换为路径段中尚未获取的最小索引。有两种合适的语法,“[*]”或“.*”。对于一个行,只考虑该行中的路径段(即,头被转换成没有来自path
列的任何信息的指示符)。在
您还可以使用*
来引用与星号前面的前缀匹配的最后一个对象。下面的示例与上面的两个表等效。在
path | . | name |
---|---|---|
myName | John | |
friends.* | Stacy | |
friends.*.dogs.0 | Rufus | |
friends.* | Paul | |
friends.*.dogs.0 | Mr. Fluffs | |
friends.*.dogs.1 | Whimpers |
利弊
- JAC CSV格式的灵活性允许输出JAC CSV的应用程序以最方便应用程序的“扁平化”方式向用户提供CSV数据,即可以创建列,以方便用户修改数据。在
- 由于jacsv格式的灵活性,一个JSON文件可以有几乎无限量的CSV变体。在
- 列顺序很重要,因为它决定了如何将CSV合并回JSON
- 项目
标签: