【问题标题】:How to represent meta data in JSON如何在 JSON 中表示元数据
【发布时间】:2019-12-04 13:57:54
【问题描述】:

注意:这是一个 NodeJs 应用程序

我有以下存储问题和答案的 JSON 对象:

{
    "id": "SOME_GUID",
    "questions": {
        "page-1": {
            // ... JSON schema for page 1.
        },
        "page-2": {
            // ... JSON schema for page 2.
        }
    },
    "answers": {
        "page-1": {
            "page-1-question-1": "something"
        },
        "page-2": {
            "page-2-question-1": true,
            "page-2-question-2": "foo"
        },
    }

}

以特定方式表示数据优于另一种方式是否有好处?我自然会选择一个简单的键/值对表示法(如下所示),因为它似乎符合这里的要求。但是我在野外(在用 Java 编写的项目中)看到了“数组表示法”(如下所示)

键/值对符号(我自然会使用):

{
    "meta": {
        "createdData": "some date",
        "modifiedData": "some date",
        "referenceNumber": "some reference number",
        "type": "some type code"
    }
}

“数组”表示法

{
    "meta": [
        {
            "key": "createdDate",
            "value": "some date"
        },
        {
            "key": "modifiedData",
            "value": "some date"
        },
        {
            "key": "referenceNumber",
            "value": "some reference number"
        },
        {
            "key": "type",
            "value": "some type code"
        },
    ]
}

【问题讨论】:

  • 您使用什么语言/框架?这可能会对您收到的答案产生很大影响。例如,在 JS 中,对象方法将为您提供可以直接引用的属性。在 C# 中,对象方法需要哈希和查找,但仍然(通常)比数组迭代更快。此外,您的数据大小可能会起作用。
  • 这是用 Node.js 编写的。它通常是一个小数据集。
  • 您已将此问题标记为属于JSON:API specification。这一点非常清楚您应该如何表示资源。这是偶然的,还是您询问了为什么要遵循该规范?
  • 对不起。那是个意外。我在这个项目中使用 JSON:API,但这个特定文件不需要遵守这些标准。

标签: node.js json metadata jsonschema json-api


【解决方案1】:

我自然会选择简单的键/值对表示法

在这种情况下,您可能希望考虑 JSON Extended Structural Schema语言 (JESS) 和相关工具,其中包括模式推理引擎 和验证检查器。

这个想法基本上是使用推理引擎来获得一个完全反映输入的草案模式;根据需要修改它, 例如覆盖一些推论或定义更复杂的约束;然后 将派生架构与验证检查器一起使用。

inference engine 需要有效的 JSON 作为输入,因此我对给出的示例进行了调整,如下所示。鉴于此作为输入, 模式推理引擎产生:

{
  "id": "string",
  "questions": {
    "page-1": {
      "page1 schema": {}
    },
    "page-2": {
      "page2 schema": {}
    }
  },
  "answers": {
    "page-1": {
      "page-1-question-1": "string"
    },
    "page-2": {
      "page-2-question-1": "boolean",
      "page-2-question-2": "string"
    }
  }
}

注意事项

  1. 推理引擎和检查器当前需要 才能运行。 jq 有一个 node.js 包装器(例如yarn add node-jq),这可能会有所帮助。

  2. JESS 相对较新。 JESS 语言是稳定的,但有些细节可能会发生变化。

  3. 我是 JESS 的作者。

示例 JSON 输入

{
  "id": "SOME_GUID",
  "questions": {
    "page-1": {
      "page1 schema": {}
    },
    "page-2": {
      "page2 schema": {}
    }
  },
  "answers": {
    "page-1": {
      "page-1-question-1": "something"
    },
    "page-2": {
      "page-2-question-1": true,
      "page-2-question-2": "foo"
    }
  }
}

【讨论】:

    【解决方案2】:
    {
        "characteristics": {
            "organism": {
                "name": "",
                "accession": "",
                "ref": ""
            },
            "organism_variant": {
                "name": "",
                "accession": "",
                "ref": ""
            },
            "organism_part": {
                "name": "",
                "accession": "",
                "ref": ""
            }
        }
    
    }
    

    参考链接:https://2isa.readthedocs.io/en/latest/other/json-metadata.html

    【讨论】:

    • 您的答案没有说明为什么这种格式应该优于其他格式。
    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2018-05-09
    • 2021-12-28
    • 2014-04-07
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多