Skip to content

Handling of single element arrays in datapackage.json #276

@sannegovaert

Description

@sannegovaert

There is a discrepancy in how single-element arrays are written and read back into the datapackage.json file. Specifically, single-element arrays are being converted into strings when the package is read and then rewritten.

Example:

  1. Create a DP:
library(frictionless)

temp <- here::here("frictionless")

resource <- data.frame(1:10, 11:20)
dp_v1 <-
  frictionless::create_package() %>% 
  add_resource(resource_name = "numbers", data = resource) %>% 
  frictionless::create_package()

dp_v1$project <- list(
  single_element = list(c("media")),
  double_element = list(c("media", "event"))
)

frictionless::write_package(dp_v1, file.path(temp, "1"))
  1. The resulting datapackage.json is as follows (as expected):
{
  "resources": [
    {
      "name": "numbers",
      "path": "numbers.csv",
      "profile": "tabular-data-resource",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "schema": {
        "fields": [
          {
            "name": "X1.10",
            "type": "integer"
          },
          {
            "name": "X11.20",
            "type": "integer"
          }
        ]
      }
    }
  ],
  "project": {
    "single_element": [
      "media"
    ],
    "double_element": [
      ["media", "event"]
    ]
  }
}

Read datapackage.json and write it back:

dp_v2 <- frictionless::read_package(file.path(temp, "1", "datapackage.json"))

frictionless::write_package(dp_v2, file.path(temp, "2"))

The resulting datapackage.json after being rewritten is not as expected:

{
  "resources": [
    {
      "name": "numbers",
      "path": "numbers.csv",
      "profile": "tabular-data-resource",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "schema": {
        "fields": [
          {
            "name": "X1.10",
            "type": "integer"
          },
          {
            "name": "X11.20",
            "type": "integer"
          }
        ]
      }
    }
  ],
  "project": {
    "single_element": "media",
    "double_element": [
      ["media", "event"]
    ]
  }
}

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions