JAC(JSON as CSV)格式转换

jac-format的Python项目详细描述


JAC(JSON as CSV)格式

JAC格式使转换JSON和CSV文件格式变得容易,同时给应用程序开发人员很大的灵活性,可以定制为最终用户修改CSV文件的容易程度。任何JSON对象都可以表示为jacsv。在

.jac.csv文件始终是有效的csv。在

下面是一个JAC文件示例:

path.namedogs.0dogs.1
myNameJohn
friends.0StacyRufus
friends.1PaulMr. FluffsWhimpers

当此文件转换为JSON时,它将变为:

{"myName":"John","friends":[{"name":"Stacy","dogs":["Rufus"]},{"name":"Paul","dogs":["Mr. Fluffs","Whimpers"]}]}

使用Javascript

npm install jac-format

^{pr2}$

使用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的每个值单元可以是
      1. 空牢房
      1. 一根绳子
      1. JSON对象
      1. 一个数字
      1. JSON数组
  • “路径”列右侧的列按从左到右的顺序应用。每行创建一个对象。然后将该对象设置在第一列的路径上。在
  • 路径可以用方括号表示法或点表示法遍历
  • 在点表示法中,数字的用法表示数组的索引(a["1"].0相当于a["1"][0]
  • 如果数组有未定义的值,则这些值将设置为null
  • 值单元格的路径是通过获取行的最左边的单元格(在“路径”列中)并将最上面的标题附加到该单元格中来构造的

带“*”的自动索引

自动索引使添加和删除行更容易,因为索引号不需要调整。在

这些表在转换为JSON时是等效的:

^{tb2}$
path.namedogs.0dogs.1
myNameJohn
friends.0StacyRufus
friends.1PaulMr. FluffsWhimpers

如果“*”替换为路径段中尚未获取的最小索引。有两种合适的语法,“[*]”或“.*”。对于一个行,只考虑该行中的路径段(即,头被转换成没有来自path列的任何信息的指示符)。在

您还可以使用*来引用与星号前面的前缀匹配的最后一个对象。下面的示例与上面的两个表等效。在

path.name
myNameJohn
friends.*Stacy
friends.*.dogs.0Rufus
friends.*Paul
friends.*.dogs.0Mr. Fluffs
friends.*.dogs.1Whimpers

利弊

  1. JAC CSV格式的灵活性允许输出JAC CSV的应用程序以最方便应用程序的“扁平化”方式向用户提供CSV数据,即可以创建列,以方便用户修改数据。在
  2. 由于jacsv格式的灵活性,一个JSON文件可以有几乎无限量的CSV变体。在
  3. 列顺序很重要,因为它决定了如何将CSV合并回JSON

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java不兼容类型:MainActivity无法转换为LifecycleOwner   java安卓是一种更有效的读取大文本文件的方法   java导出LWJGL本地人与项目?(IntelliJ IDEA)   JDK更新后,JavaJShell不再在下一行打印输出   父类对象上的继承Java比较子属性   Java:有没有一个容器可以有效地结合HashMap和ArrayList?   安卓 Java对象指针   java在annotationdriven Spring MVC应用程序中实现大气   java 安卓源代码构建应用找不到安卓supportv4。罐子   文件系统上的抽象层和Java中的jar/zip   java在水平滚动视图中添加多个图像?   java如何从firebase实时数据库中获取字符串数组   WIndows 10工作站上的java未满足链接错误   java命令在终端中工作,但在使用过程中出现“无结束引号”错误。执行官