mirror of
				https://github.com/taigrr/yq
				synced 2025-01-18 04:53:17 -08:00 
			
		
		
		
	Convert to JSON now handles non string keys
This commit is contained in:
		
							parent
							
								
									5b7b390a33
								
							
						
					
					
						commit
						f528b28938
					
				| @ -94,6 +94,28 @@ func TestReadUnwrapJsonByDefaultCmd(t *testing.T) { | ||||
| 	test.AssertResult(t, "\"frog\"\n", result.Output) | ||||
| } | ||||
| 
 | ||||
| func TestReadOutputJsonNonStringKeysCmd(t *testing.T) { | ||||
| 
 | ||||
| 	content := ` | ||||
| true: true | ||||
| 5:  | ||||
|   null:  | ||||
|     0.1: deeply | ||||
|     false: things` | ||||
| 	filename := test.WriteTempYamlFile(content) | ||||
| 	defer test.RemoveTempYamlFile(filename) | ||||
| 
 | ||||
| 	cmd := getRootCommand() | ||||
| 	result := test.RunCmd(cmd, fmt.Sprintf("read %s -j", filename)) | ||||
| 
 | ||||
| 	if result.Error != nil { | ||||
| 		t.Error(result.Error) | ||||
| 	} | ||||
| 	expectedOutput := `{"5":{"null":{"0.1":"deeply","false":"things"}},"true":true} | ||||
| ` | ||||
| 	test.AssertResult(t, expectedOutput, result.Output) | ||||
| } | ||||
| 
 | ||||
| func TestReadWithAdvancedFilterCmd(t *testing.T) { | ||||
| 	cmd := getRootCommand() | ||||
| 	result := test.RunCmd(cmd, "read ../examples/sample.yaml b.e(name==sam).value") | ||||
|  | ||||
| @ -58,6 +58,21 @@ type jsonEncoder struct { | ||||
| 	encoder *json.Encoder | ||||
| } | ||||
| 
 | ||||
| func mapKeysToStrings(node *yaml.Node) { | ||||
| 	 | ||||
| 	if node.Kind == yaml.MappingNode { | ||||
| 		for index, child := range node.Content { | ||||
| 			if index % 2 == 0 { // its a map key | ||||
| 				child.Tag = "!!str" | ||||
| 			} | ||||
| 		}	 | ||||
| 	} | ||||
| 
 | ||||
| 	for _, child := range node.Content { | ||||
| 		mapKeysToStrings(child) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func NewJsonEncoder(destination io.Writer, prettyPrint bool, indent int) Encoder { | ||||
| 	var encoder = json.NewEncoder(destination) | ||||
| 	var indentString = "" | ||||
| @ -73,6 +88,8 @@ func NewJsonEncoder(destination io.Writer, prettyPrint bool, indent int) Encoder | ||||
| 
 | ||||
| func (je *jsonEncoder) Encode(node *yaml.Node) error { | ||||
| 	var dataBucket interface{} | ||||
| 	// firstly, convert all map keys to strings | ||||
| 	mapKeysToStrings(node) | ||||
| 	errorDecoding := node.Decode(&dataBucket) | ||||
| 	if errorDecoding != nil { | ||||
| 		return errorDecoding | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user