-
Notifications
You must be signed in to change notification settings - Fork 5
More context for deserialization failures such as "Digit expected at beginning of number" #18
Copy link
Copy link
Open
Description
If deserialization of a large object fails, the only information we have to go by is the error message. This makes it challenging to diagnose which part of the JSON object was not accepted by the program.
For example, I am dealing with the following error:
2025-07-06T18:53:21.986 [error] businesseventpoller.d:101:__foreachbody2 Encountered error: std.json.JSONException@/build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d(2713): Digit expected at beginning of number.
----------------
??:? [0x9cee86]
??:? [0x9ceaf2]
??:? [0x9f7bae]
??:? [0x9d7f9f]
nix/store/6nlrhnbn168zlqk8k8cq1q3cp18yqrbq-ldc-1.39.0-include/include/d/std/exception.d:522 [0x57c003]
nix/store/6nlrhnbn168zlqk8k8cq1q3cp18yqrbq-ldc-1.39.0-include/include/d/std/exception.d:442 [0x57bf05]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d:2821 [0x57bd2a]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d:2713 [0x57b922]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d:2691 [0x57b3ae]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d:2207 [0x58ab30]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:740 [0x58aaf8]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:704 [0x5864b8]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:938 [0x5851e5]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d:2148 [0x5848a6]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:913 [0x583d34]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:704 [0x583c68]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:813 [0x5a1fbc]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/json.d:2172 [0x5a1f25]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:809 [0x5a1de9]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:704 [0x5a1d98]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/data/serialization.d:310 [0x4ca8c8]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-d/web/vibe/web/common.d:572 [0x4ca887]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-d/web/vibe/web/rest.d:1992 [0x4ba397]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-serialization/source/vibe/internal/meta/codegen.d-mixin-301:304 [0x4b9c9c]
/build/source/my-team/business-app/source/business-app/eventpollers/businesseventpoller.d:116 [0x45a541]
/build/source/my-team/business-app/source/business-app/eventpollers/businesseventpoller.d:78 [0x46dae4]
nix/store/6nlrhnbn168zlqk8k8cq1q3cp18yqrbq-ldc-1.39.0-include/include/d/std/range/interfaces.d:489 [0x62cf0a]
/build/source/my-team/business-app/source/business-app/eventpollers/businesseventpoller.d:66 [0x46d5e4]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-core/source/vibe/core/core.d:1138 [0x90f3c3]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-core/source/vibe/core/core.d:1201 [0x90f580]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-core/source/vibe/core/task.d:813 [0x933634]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-core/source/vibe/core/task.d:832 [0x93121b]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-core/source/vibe/core/task.d:502 [0x930a39]
build/de6fb314a2297aca2e4e840e2079c266b9ead6afb78f23677ba44c52f4c72a93/vibe-core/source/vibe/core/task.d:411 [0x9303e8]
??:? [0x9cfee2]
It's not quite obvious how to discover the source of the problem from the above.
Some ways we can improve:
- When deserializing objects and arrays, include the path to the respective field in the raised error message.
- If the problem concerns a specific value, include that value in the raised error message.
- We can also include a fragment of the problematic JSON at the respective position (e.g. it could be the surrounding 20 characters).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels