【问题标题】:Inserting empty arrays in JSON type fields in datastore在数据存储区的 JSON 类型字段中插入空数组
【发布时间】:2014-08-04 02:47:19
【问题描述】:

我在资源数据存储中定义了一个 JSON 类型的名为“value”的字段(以及其他一些字段)。如果我使用简单值或非空数组运行 upsert,一切正常:

POST http://host/api/3/action/datastore_upsert
{
   "resource_id": "...",
   "records": [
                 { "value": [ "1", "2" ] }
              ],
   "method": "insert",
   "force": "True"
}

POST http://host/api/3/action/datastore_upsert
{
   "resource_id": "...",
   "records": [
                 { "value": "23" }
              ],
   "method": "insert",
   "force": "True"
}

但是,如果我使用一个空数组

POST http://host/api/3/action/datastore_upsert
{
   "resource_id": "...",
   "records": [
                 { "value": [ ] }
              ],
   "method": "insert",
   "force": "True"
}

我收到以下错误:

{
    ...
    "success": false,
    "error": {
        "info": {
            "orig": [
                "malformed record literal: \"{}\"\nLINE 2:             VALUES (NULL, NULL, NULL, NULL, '{}', NULL, to_t...\n                                                    ^\nDETAIL:  Missing left parenthesis.\n"
            ]
        },
        "__type": "Validation Error",
        "data": "(DataError) malformed record literal: \"{}\"\nLINE 2:             VALUES (NULL, NULL, NULL, NULL, '{}', NULL, to_t...\n                                                    ^\nDETAIL:  Missing left parenthesis.\n"
    }
}

鉴于[ ] 是 JSON 中的有效元素,我想知道为什么会发生此错误。这是 CKAN 数据存储 API 中的已知问题/错误吗?

【问题讨论】:

标签: arrays json datastore ckan


【解决方案1】:

谢谢!你发现了一个错误。我在https://github.com/ckan/ckan/pull/1776 上修复了它并发送了一个拉取请求。这将由另一个核心开发人员审核并很快合并。

如果您有时间,您可以测试该分支以确认它解决了这个问题,这将很有用。如果您这样做,请在拉取请求上添加评论。

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2017-03-24
    • 2011-07-17
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多