func decodeFields()

in dev/import-beats/kibana.go [399:429]


func decodeFields(ms mapStr) (mapStr, error) {
	for _, field := range encodedFields {
		v, err := ms.getValue(field)
		if err == errKeyNotFound {
			continue
		} else if err != nil {
			return nil, errors.Wrapf(err, "retrieving value failed (key: %s)", field)
		}

		var target interface{}
		var vd mapStr
		vStr := v.(string)
		err = json.Unmarshal([]byte(vStr), &vd)
		if err != nil {
			var vda []mapStr
			err = json.Unmarshal([]byte(vStr), &vda)
			if err != nil {
				return nil, errors.Wrapf(err, "unmarshalling value failed (key: %s)", field)
			}
			target = vda
		} else {
			target = vd
		}

		_, err = ms.put(field, target)
		if err != nil {
			return nil, errors.Wrapf(err, "putting value failed (key: %s)", field)
		}
	}
	return ms, nil
}