diff --git a/crates/nu-command/src/formats/to/json.rs b/crates/nu-command/src/formats/to/json.rs index fcf94ef214..87aa4e650b 100644 --- a/crates/nu-command/src/formats/to/json.rs +++ b/crates/nu-command/src/formats/to/json.rs @@ -30,10 +30,27 @@ impl Command for ToJson { input: PipelineData, ) -> Result { let raw = call.has_flag("raw"); - if raw { - to_json_raw(call, input) + + let json_function = if raw { + nu_json::to_string_raw } else { - to_json(call, input) + nu_json::to_string + }; + + let span = call.head; + let value = input.into_value(span); + let json_value = value_to_json_value(&value)?; + + match json_function(&json_value) { + Ok(serde_json_string) => Ok(Value::String { + val: serde_json_string, + span, + } + .into_pipeline_data()), + _ => Ok(Value::Error { + error: ShellError::CantConvert("JSON".into(), value.get_type().to_string(), span), + } + .into_pipeline_data()), } } @@ -94,44 +111,6 @@ fn json_list(input: &[Value]) -> Result, ShellError> { Ok(out) } -fn to_json(call: &Call, input: PipelineData) -> Result { - let span = call.head; - - let value = input.into_value(span); - - let json_value = value_to_json_value(&value)?; - match nu_json::to_string(&json_value) { - Ok(serde_json_string) => Ok(Value::String { - val: serde_json_string, - span, - } - .into_pipeline_data()), - _ => Ok(Value::Error { - error: ShellError::CantConvert("JSON".into(), value.get_type().to_string(), span), - } - .into_pipeline_data()), - } -} - -fn to_json_raw(call: &Call, input: PipelineData) -> Result { - let span = call.head; - - let value = input.into_value(span); - - let json_value = value_to_json_value(&value)?; - match nu_json::to_string_raw(&json_value) { - Ok(serde_json_string) => Ok(Value::String { - val: serde_json_string, - span, - } - .into_pipeline_data()), - _ => Ok(Value::Error { - error: ShellError::CantConvert("JSON".into(), value.get_type().to_string(), span), - } - .into_pipeline_data()), - } -} - #[cfg(test)] mod test { use super::*;