fix(redis): preserve int64 precision in JSON string values for GET results
This commit is contained in:
parent
6f7263bc75
commit
1da30465ea
|
|
@ -916,7 +916,16 @@ pub fn redis_command_raw_to_json(value: RedisRawValue) -> serde_json::Value {
|
|||
"kind": format!("{kind:?}"),
|
||||
"data": redis_command_raw_to_json(RedisRawValue::Array(data)),
|
||||
}),
|
||||
RedisRawValue::BulkString(bytes) => serde_json::Value::String(redis_bytes_to_display(&bytes)),
|
||||
RedisRawValue::BulkString(bytes) => {
|
||||
let text = redis_bytes_to_display(&bytes);
|
||||
let trimmed = text.trim();
|
||||
if trimmed.starts_with('{') || trimmed.starts_with('[') {
|
||||
if let Ok(json) = serde_json::from_str::<serde_json::Value>(trimmed) {
|
||||
return super::json_value_for_js(json);
|
||||
}
|
||||
}
|
||||
serde_json::Value::String(text)
|
||||
}
|
||||
RedisRawValue::SimpleString(value) => serde_json::Value::String(value),
|
||||
RedisRawValue::Okay => serde_json::Value::String("OK".to_string()),
|
||||
RedisRawValue::Int(value) => super::safe_i64_to_json(value),
|
||||
|
|
@ -2000,6 +2009,25 @@ mod tests {
|
|||
assert_eq!(redis_command_raw_to_json(raw), serde_json::json!("2326645729978441729"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn converts_bulkstring_json_with_unsafe_int64_for_js() {
|
||||
let raw = RedisRawValue::BulkString(br#"{"uid":2321205972557213697,"name":"test"}"#.to_vec());
|
||||
|
||||
assert_eq!(redis_command_raw_to_json(raw), serde_json::json!({"uid": "2321205972557213697", "name": "test"}));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn keeps_plain_bulkstring_as_is() {
|
||||
let raw = RedisRawValue::BulkString(b"hello world".to_vec());
|
||||
assert_eq!(redis_command_raw_to_json(raw), serde_json::json!("hello world"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn keeps_string_like_number_as_string() {
|
||||
let raw = RedisRawValue::BulkString(b"42".to_vec());
|
||||
assert_eq!(redis_command_raw_to_json(raw), serde_json::json!("42"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn recognizes_redis_json_module_key_types() {
|
||||
assert!(is_redis_json_type("ReJSON-RL"));
|
||||
|
|
|
|||
Loading…
Reference in New Issue