RecursiveJsonSplitter Incorrectly Sizes Chunks Using Escaped JSON When Ensure_ascii=False
When `ensure_ascii=False` is passed to `split_text`, `_json_size` still measures using `json.dumps` with default `ensure_ascii=True`, causing non-ASCII chunks to be far below `max_chunk_size` and producing more chunks than expected.
`_json_size` calls `json.dumps(data)` without forwarding `ensure_ascii`, while `split_text` serializes final chunks with `ensure_ascii=False`.
1. Install langchain-text-splitters 1.1.2.\n2. Run:\n```python\nfrom langchain_text_splitters import RecursiveJsonSplitter\ndata = {str(i): "你好世界" * 10 for i in range(20)}\nsplitter = RecursiveJsonSplitter(max_chunk_size=500)\nchunks = splitter.split_text(json_data=data, ensure_ascii=False)\nprint(len(chunks))\nprint([len(c) for c in chunks])\n```\n3. Observe chunks of length around 98-100 instead of close to 500; with `ensure_ascii=True` chunks are 498-500.
Add `ensure_ascii` parameter to `_json_size`, `_json_split`, and `split_json`, defaulting to `True` to preserve existing behavior. All recursive size checks and split calls now forward `ensure_ascii`, ensuring measurement matches final serialization.
Edge Case Audit
The fix changes chunk sizing for non-ASCII data when `ensure_ascii=False`; chunks will be larger and closer to `max_chunk_size`. If callers unexpectedly relied on the previous smaller chunks, they may see increased per-chunk token counts. Use the default `ensure_ascii=True` to retain escaped sizing. Rollback by reverting this patch or by passing `ensure_ascii=True` explicitly in all calls.