Introduction

It may be necessary to include nested data as an encoded string, such as a bit of YAML embedded as a string inside a JSON request. The steps below show how to accomplish that with the cue command line. First with JSON, then with YAML.

Prerequisites

  • You have CUE installed locally. This allows you to run cue commands

Encoding Nested JSON

Create a CUE file which uses the json package to encode an inner value:

nested-json.cue
import "encoding/json"

_innerData: {
	innerString: "inside"
}

nestedJSON:  json.Marshal(_innerData)
outerString: "outside"

Use cue export to evaluate and encode the entire value:

TERMINAL
$ cue export nested-json.cue
{
    "nestedJSON": "{\"innerString\":\"inside\"}",
    "outerString": "outside"
}

Encoding YAML to JSON

Use a different encoding package for encoding the nested value, such as yaml:

nested-yaml.cue
import "encoding/yaml"

_innerData: {
	innerString: "inside"
}

nestedYAML:  yaml.Marshal(_innerData)
outerString: "outside"
TERMINAL
$ cue export nested-yaml.cue
{
    "nestedYAML": "innerString: inside\n",
    "outerString": "outside"
}

Choosing different encodings with cue export --out

Use a different encoding for the entire value via the --out flag, such as yaml:

TERMINAL
$ cue export nested-json.cue --out yaml
nestedJSON: '{"innerString":"inside"}'
outerString: outside

… or cue:

TERMINAL
$ cue export nested-yaml.cue --out cue
nestedYAML: """
	innerString: inside

	"""
outerString: "outside"

For all encodings see the encoding package listing.