///|
/// Serialize a JSON value as compact JSON text (jq's `tojson`).
fn json_to_text(value : Json) -> String {
value.stringify()
}
///|
/// jq's `tostring`: strings are returned unchanged, everything else is
/// serialized as JSON text.
fn json_to_display_string(value : Json) -> String {
match value {
String(s) => s
_ => json_to_text(value)
}
}
///|
/// Evaluate ToJsonString
fn eval_to_json_string(input : Json) -> Iter[Json] {
Iter::singleton(Json::string(json_to_text(input)))
}
///|
/// Evaluate FromJsonString
fn eval_from_json_string(input : Json) -> Iter[Json] raise InterpreterError {
guard input is String(s) else {
raise TypeMismatch("string", @ast_internal.json_type_name(input))
}
let parsed = @json.parse(s) catch {
e => raise InvalidOperation("JSON parse error: \{e}")
}
Iter::singleton(parsed)
}