json_partial 0.2.1

Json fixing parser for imperfect json given by LLMs
Documentation
use crate::jsonish;
pub fn jsonish_to_serde(value: &jsonish::Value) -> serde_json::Value {
    match value {
        jsonish::Value::String(s) => serde_json::Value::String(s.clone()),
        jsonish::Value::Number(n) => serde_json::Value::Number(n.clone()),
        jsonish::Value::Boolean(b) => serde_json::Value::Bool(*b),
        jsonish::Value::Null => serde_json::Value::Null,
        jsonish::Value::Object(fields) => {
            let mut map = serde_json::Map::new();
            for (k, v) in fields {
                map.insert(k.clone(), jsonish_to_serde(v));
            }
            serde_json::Value::Object(map)
        }
        jsonish::Value::Array(elements) => {
            serde_json::Value::Array(elements.iter().map(jsonish_to_serde).collect())
        }
        jsonish::Value::Markdown(_, inner) => jsonish_to_serde(inner),
        jsonish::Value::FixedJson(inner, _) => jsonish_to_serde(inner),
        jsonish::Value::AnyOf(values, _) => values
            .iter()
            .find_map(|v| match jsonish_to_serde(v) {
                serde_json::Value::Null => None,
                val => Some(val),
            })
            .unwrap_or(serde_json::Value::Null),
    }
}