// Decode reads a YAML document as JSON from the stream or returns // an error. The decoding rules match json.Unmarshal, not // yaml.Unmarshal. func (d *YAMLToJSONDecoder) Decode(into interface{}) error { if d.scanner.Scan() { data, err := yaml.YAMLToJSON(d.scanner.Bytes()) if err != nil { return err } return json.Unmarshal(data, into) } err := d.scanner.Err() if err == nil { err = io.EOF } return err }
// ToJSON converts a single YAML document into a JSON document // or returns an error. If the document appears to be JSON the // YAML decoding path is not used (so that error messages are) // JSON specific. func ToJSON(data []byte) ([]byte, error) { if hasJSONPrefix(data) { return data, nil } return yaml.YAMLToJSON(data) }