MCPcopy Index your code
hub / github.com/InfinitiBit/graphbit / py_object_to_serde_json

Function py_object_to_serde_json

python/src/document_loader.rs:376–412  ·  view source on GitHub ↗

Helper function to convert Python object to serde_json::Value

(py: Python<'_>, obj: &Bound<'_, PyAny>)

Source from the content-addressed store, hash-verified

374
375/// Helper function to convert Python object to serde_json::Value
376fn py_object_to_serde_json(py: Python<'_>, obj: &Bound<'_, PyAny>) -> PyResult<serde_json::Value> {
377 if obj.is_none() {
378 Ok(serde_json::Value::Null)
379 } else if let Ok(b) = obj.extract::<bool>() {
380 Ok(serde_json::Value::Bool(b))
381 } else if let Ok(i) = obj.extract::<i64>() {
382 Ok(serde_json::Value::Number(serde_json::Number::from(i)))
383 } else if let Ok(f) = obj.extract::<f64>() {
384 if let Some(n) = serde_json::Number::from_f64(f) {
385 Ok(serde_json::Value::Number(n))
386 } else {
387 Err(pyo3::exceptions::PyValueError::new_err(
388 "Invalid floating point number",
389 ))
390 }
391 } else if let Ok(s) = obj.extract::<String>() {
392 Ok(serde_json::Value::String(s))
393 } else if let Ok(list) = obj.downcast::<pyo3::types::PyList>() {
394 let mut vec = Vec::new();
395 for item in list.iter() {
396 vec.push(py_object_to_serde_json(py, &item)?);
397 }
398 Ok(serde_json::Value::Array(vec))
399 } else if let Ok(dict) = obj.downcast::<pyo3::types::PyDict>() {
400 let mut map = serde_json::Map::new();
401 for (key, value) in dict.iter() {
402 let key_str: String = key.extract()?;
403 let json_value = py_object_to_serde_json(py, &value)?;
404 map.insert(key_str, json_value);
405 }
406 Ok(serde_json::Value::Object(map))
407 } else {
408 Err(pyo3::exceptions::PyTypeError::new_err(
409 "Unsupported type for JSON conversion",
410 ))
411 }
412}

Callers 1

Calls 1

insertMethod · 0.80

Tested by

no test coverage detected