Как встроить буквенный JSON в YAML с помощью JSONNET? - PullRequest
0 голосов
/ 16 октября 2019

Вот что я пытаюсь достичь с помощью jsonnet:

version: "v1"
data:
  j.json: |-
    {
      "foo": "bar"
    }

Вот моя неудачная попытка:

local j = {
  foo: "bar"
};

local wrapper = {
  version: "v1",
  data: {
    'j.json': |||
      j
    |||
  }
};

std.manifestYamlDoc(wrapper)

В моей попытке я получаю следующий результат:

"data":
  "j.json": |
    j
"version": "v1"

Как добиться желаемого результата?

1 Ответ

2 голосов
/ 16 октября 2019

Пара вещей там:

  • многострочная строка, которую вы строите с выражением |||, является литералом, потребуется оператор формата %<blah>, как и любая другая строка
  • выглядитвы хотите, чтобы std.manifestJson() там
  • Я бы предпочел использовать JSON как YAML и использовать вывод jsonnet, более разборчиво:

foo.jsonnet:

local j = {
  foo: "bar"
};

local wrapper = {
  version: "v1",
  data: {
    'j.json': std.manifestJson(j)
  }
};

wrapper

Выход jsonnet:

$ jsonnet foo.jsonnet
{
   "data": {
      "j.json": "{\n    \"foo\": \"bar\"\n}"
   },
   "version": "v1"
}

проверка поля j.json с jq

$ jsonnet foo.jsonnet | jq -r '.data["j.json"]' | jq
{
  "foo": "bar"
}
...