json(-ld)和irods avus之间的双向转换

irods-avu-json的Python项目详细描述


json(-ld)和irods avus之间的双向转换

基本原理

JSON是一种灵活且易于使用的格式,用于存储(嵌套)数据。同时 它可以保持人类可读性。因此,它是一种理想的方法 在irods中存储元数据。但是,irods使用属性、值、单位三元组。它的 最大的缺点是缺乏嵌套。

此脚本描述了一种将json转换为avu三元组并再次转换的方法。 (双向)。

设计目标

  • JSON与lt;->;AVU之间的双射
    • 即不限制属性中使用的字符
    • 即能够保持数组中的顺序
  • 精益JSON->;AVU转换。
    • 不要在avus中不必要地分解json
  • 保持json和avus中的属性-值对相同。因此,从irod中可以很容易地访问值
  • 与现有的或附加的AVUS
  • 兼容
  • 兼容/了解JSON-LD

实施

unit is字段用于以下目的:

  • 定义json根
  • 父对象(默认为0)
  • 对象类型(o、s、b、a、n、z、e)
  • 数组索引

avus只允许字符串值。类型转换如下:

  • s:string
  • o:object(“o”+对象id)
  • B:布尔值(“真”或“假”)
  • n:number(float或int的字符串值)
  • Z:空(“.”)
  • E:空字符串(“.”)(特殊情况下,AVU不允许空值)
  • A:空数组(“.”)

安装

克隆git存储库,或使用pip将模块仅安装到虚拟环境中:

pip install https://github.com/MaastrichtUniversity/irods_avu_json/archive/master.zip

示例输出

Source:
{
    "k1": "v1",
    "k2": {
        "k3": "v2",
        "k4": "v3"
    },
    "k5": [
        "v4",
        "v5"
    ],
    "k6": [
        {
            "k7": "v6",
            "k8": "v7"
        }
    ]
}
AVUs:
      A       V               U
     k1      v1        root_0_s
     k2      o1       root_0_o1
     k3      v2        root_1_s
     k4      v3        root_1_s
     k5      v4      root_0_s#0
     k5      v5      root_0_s#1
     k6      o2     root_0_o2#0
     k7      v6        root_2_s
     k8      v7        root_2_s
JSON:
{
    "k1": "v1",
    "k2": {
        "k3": "v2",
        "k4": "v3"
    },
    "k5": [
        "v4",
        "v5"
    ],
    "k6": [
        {
            "k7": "v6",
            "k8": "v7"
        }
    ]
}

开发助手

使用conversion.py脚本进行简单的开发。与Python2和3兼容。

python conversion.py inputs/basic.json

测试

可以从test目录运行测试。只有在Python3。

python3 -m unittest test.TestIrodsAvuJson

限制

在AVU侧

  • 如果两个avu具有相同的属性和单位,但值不同,则只有最后一个avu在json中结束

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

推荐PyPI第三方库


热门话题
java如何创建比较器   java将所有接口读入列表   java Android Studio在Webview中隐藏特定URL的操作栏   java如何在春季从云存储中生成URL文件而无需持续时间   icalendar如何使用Java以日历格式发送ics电子邮件附件?   如果textfield包含数字,则在运行时进行java检查   java util日志属性中何时需要“.level”?   java在一个字符串中显示json   跨平台日志系统的java Log4j替代方案   coldfusion在Lucee上安装Cassandra Java驱动程序   SpringWebMVC4Java配置不工作   windows使用java程序添加环境变量,并且能够在我从计算机打开“环境”选项卡时看到   java未设置变量和方法   mysql在java中通过查询更改数据库的现有行   java如何使用递归方法查找所有可能的数字   java如何使非原语类成员不可变   java将信息从输入按钮传递到标签