@@ -146,57 +146,23 @@ func (r *Renderer) jsonPathCSVValue(c Path, ctx recordctx.Context) (string, erro
146146 }
147147
148148 if resultErr == nil {
149- // Optimize TypeObject to avoid json decode and re-encode.
150- if value .Type () == fastjson .TypeObject {
151- return value .GetObject ().String (), nil
149+ if value .Type () == fastjson .TypeString && c .RawString {
150+ return string (value .GetStringBytes ()), nil
152151 }
153152
154- result , resultErr = r . getJSONValue ( value )
153+ return value . String (), nil
155154 } else if c .DefaultValue != nil {
156155 result = * c .DefaultValue
157156 resultErr = nil
158- }
159-
160- if resultErr != nil {
161- return "" , resultErr
162- }
163157
164- if c .RawString {
165- if stringValue , ok := result .(string ); ok {
166- return stringValue , nil
167- }
168- }
169-
170- return json .EncodeString (result , false )
171- }
172-
173- func (r * Renderer ) getJSONValue (value * fastjson.Value ) (any , error ) {
174- switch value .Type () {
175- case fastjson .TypeObject :
176- var result any
177- err := json .DecodeString (value .GetObject ().String (), & result )
178- return result , err
179- case fastjson .TypeArray :
180- result := []any {}
181- for _ , v := range value .GetArray () {
182- jsonValue , err := r .getJSONValue (v )
183- if err != nil {
184- return nil , err
158+ if c .RawString {
159+ if stringValue , ok := result .(string ); ok {
160+ return stringValue , nil
185161 }
186- result = append (result , jsonValue )
187162 }
188- return result , nil
189- case fastjson .TypeString :
190- return string (value .GetStringBytes ()), nil
191- case fastjson .TypeNumber :
192- return value .GetFloat64 (), nil
193- case fastjson .TypeTrue :
194- return true , nil
195- case fastjson .TypeFalse :
196- return false , nil
197- case fastjson .TypeNull :
198- return nil , nil
163+
164+ return json .EncodeString (result , false )
199165 }
200166
201- return nil , errors . New ( "Unexpected fastjson type" )
167+ return "" , resultErr
202168}
0 commit comments