dictknifeのmkdictでJSONを生成する時に不格好だけれど任意の配列も許すようにした

github.com

昨日のこの記事の続き。

不格好だけれど、配列(pythonではlist)をサポートした。

name description
xs/0/ xs[0] の意味
xs/-1/ xs[-1] の意味
xs// xs.append の意味

最終的な値が配列の場合

$ dictknife mkdict xs/ a xs/ b xs/ c
{
  "xs": [
    "a",
    "b",
    "c"
  ]
}

最終的な値がオブジェクトの配列の場合

$ dictknife mkdict xs//name a xs//name b xs//name c
{
  "xs": [
    {
      "name": "a"
    },
    {
      "name": "b"
    },
    {
      "name": "c"
    }
  ]
}

オブジェクトが複数のフィールドを持った場合

$ dictknife mkdict xs//name a xs/-1/age 20 xs//name b xs/-1/age 10
{
  "xs": [
    {
      "name": "a",
      "age": 20
    },
    {
      "name": "b",
      "age": 10
    }
  ]
}

まじめに全部indexを指定しても良い。

$ dictknife mkdict xs/0/name a xs/0/age 20 xs/1/name b xs/1/age 10
{
  "xs": [
    {
      "name": "a",
      "age": 20
    },
    {
      "name": "b",
      "age": 10
    }
  ]
}

添字で位置を指定して生成も可能

$ dictknife mkdict xs/1/name a xs/1/age 20 xs/0/name b xs/0/age 10
{
  "xs": [
    {
      "name": "b",
      "age": 10
    },
    {
      "name": "a",
      "age": 20
    }
  ]
}

余ったものは空オブジェクト

$ dictknife mkdict xs/5/name a xs/5/age 20
{
  "xs": [
    {},
    {},
    {},
    {},
    {},
    {
      "name": "a",
      "age": 20
    }
  ]
}

変数と一緒に使う

$ dictknife mkdict @xs/0/name a @xs/0/age 20 @xs/1/name b @xs/1/age 10 names/ "&xs/0/name" names/ "&xs/1/name"
{
  "names": [
    "a",
    "b"
  ]
}