Skip to main content

Module rewrite

Module rewrite 

Expand description

Streaming JSON rewriting.

This module supports streaming replacement and removal for scalar values and whole object/array subtrees. A replaced or removed container is suppressed as the tokenizer streams through it, so non-capturing rewrites do not need to buffer the subtree.

§Example

use rama_json::{
    path::JsonPath,
    rewrite::{JsonHandlers, raw_json, rewrite_bytes},
};

let input = br#"{"id":1,"prompt":{"text":"secret"},"extensions":[{"id":1},{"id":2}]}"#;
let output = rewrite_bytes(
    input,
    JsonHandlers::new()
        .on(JsonPath::builder().member("prompt").build(), |value| {
            value.remove();
            Ok(())
        })
        .on(
            JsonPath::builder().member("extensions").index(0).build(),
            |value| value.replace(raw_json(br#"{"id":9}"#)),
        ),
)?;

assert_eq!(output, br#"{"id":1,"extensions":[{"id":9},{"id":2}]}"#);

Structs§

JsonHandlers
Closure-based handler builder.
JsonRewriter
Streaming JSON rewriter.
JsonValue
One selected JSON value.
RawJson
Already serialized JSON replacement bytes.
SerdeJson
JSON replacement value encoded through serde.

Enums§

JsonKind
JSON value kind.

Traits§

JsonValueHandler
Handles a selected JSON value.
JsonWritable
A value that can be written as JSON replacement bytes.

Functions§

raw_json
Wraps already serialized JSON replacement bytes.
rewrite_bytes
Rewrites a complete JSON byte slice.
serde_json_value
Wraps a value that should be encoded as JSON through serde.

Type Aliases§

HandlerResult
Result returned by JSON rewrite handlers.