diff --git a/cmd/root.go b/cmd/root.go index e3b3bdbf..9ab13b0c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -52,6 +52,13 @@ func New() *cobra.Command { return err } + if outputToJSON { + explodeOp := treeops.Operation{OperationType: treeops.Explode} + explodeNode := treeops.PathTreeNode{Operation: &explodeOp} + pipeOp := treeops.Operation{OperationType: treeops.Pipe} + pathNode = &treeops.PathTreeNode{Operation: &pipeOp, Lhs: pathNode, Rhs: &explodeNode} + } + matchingNodes, err := evaluate("-", pathNode) if err != nil { return err diff --git a/cmd/utils.go b/cmd/utils.go index 2b24c231..debd25fa 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -136,14 +136,6 @@ func printResults(matchingNodes *list.List, writer io.Writer) error { colorsEnabled = true } - //always explode anchors when printing json - if explodeAnchors || outputToJSON { - errorExploding := explode(matchingNodes) - if errorExploding != nil { - return errorExploding - } - } - bufferedWriter := bufio.NewWriter(writer) defer safelyFlush(bufferedWriter) diff --git a/pkg/yqlib/treeops/lib.go b/pkg/yqlib/treeops/lib.go index 51d3500b..c9ba0b0c 100644 --- a/pkg/yqlib/treeops/lib.go +++ b/pkg/yqlib/treeops/lib.go @@ -24,9 +24,7 @@ type OperationType struct { // - documentIndex - retrieves document index, can be used with select // - mergeAppend (merges and appends arrays) // - mergeEmpty (sets only if the document is empty, do I do that now?) -// - updateStyle - not recursive // - updateTag - not recursive -// - explodeAnchors // - compare ?? // - validate ?? // - exists diff --git a/pkg/yqlib/treeops/operator_explode_test.go b/pkg/yqlib/treeops/operator_explode_test.go index b9f79cc5..8117e142 100644 --- a/pkg/yqlib/treeops/operator_explode_test.go +++ b/pkg/yqlib/treeops/operator_explode_test.go @@ -4,8 +4,6 @@ import ( "testing" ) -//nested alias - var explodeTest = []expressionScenario{ { document: `{a: mike}`, @@ -37,6 +35,15 @@ var explodeTest = []expressionScenario{ "D0, P[foobar], (!!map)::{c: foo_c, a: foo_a, thing: foobar_thing}\n", }, }, + { + document: mergeDocSample, + expression: `.foo* | explode(explode(.)) | (. style="flow")`, + expected: []string{ + "D0, P[foo], (!!map)::{a: foo_a, thing: foo_thing, c: foo_c}\n", + "D0, P[foobarList], (!!map)::{b: bar_b, a: foo_a, thing: bar_thing, c: foobarList_c}\n", + "D0, P[foobar], (!!map)::{c: foo_c, a: foo_a, thing: foobar_thing}\n", + }, + }, { document: `{f : {a: &a cat, b: &b {f: *a}, *a: *b}}`, expression: `explode(.f)`,