Comments (10)
This is strange behavior and it doesn't conform to "the shortest possible representation", which is what the underlying algorithm is supposed to do. Glaze uses a slightly modified version of the code yyjson uses, and looking over the code I would expect this to also show up in yyjson, which is interesting.
Will have to be investigated further. But, the output is valid JSON and correct, so it isn't a major concern.
from glaze.
I do not think it is valid json. Looking at the railroad diagram on https://www.json.org/json-en.html it seems like a leading 0 must be followed by an optional fraction and optional exponent.
Also, it is rejected when deserializing back from json - I discovered this as part of a roundtrip test. So I think this should be labeled bug, not enhancement.
from glaze.
Yup, my bad. You're right this is a bug and broken.
from glaze.
Note: This case works for double
, just not float
. The original code from yyjson only handles double
, so the optimizations for float
using double
parsing code introduce some incompatibility. Looking into it.
from glaze.
I'm moving to use std::to_chars
with special conversions for inf
and nan
to null
for JSON compliance. This should fix any serialization issues with floating point numbers.
from glaze.
Well... the performance for std::to_chars
is abysmal at least on MacOS Arm. I'm going to figure out a faster solution, it just might take a bit longer.
from glaze.
I've switched Glaze to use the dragonbox algorithm underneath with new float handling. It solves this particular case and I haven't gotten it to error in my tests.
from glaze.
Unfortunately this still does not handle my roundtrip tests. It failed on the denormalized number 1.40129846e-45f which got serialized to {"value":1.E-45} which is rejected by the glaze deserializer.
from glaze.
It is work in progress, but you can view that particular test here: https://github.com/pauldreik/glaze/blob/fuzz/fuzzing/json_roundtrip_floating.cpp
from glaze.
Thanks for sharing your fuzz testing! Also, I've added better random float and double testing to Glaze in #1190.
#1190 also fixes the denormalized number serialization issue.
from glaze.
Related Issues (20)
- How to correctly read into variant where structs have the same member names? HOT 1
- Compilation error because of `glaze/reflection/enum_macro.hpp` HOT 5
- Reading and Writing binary to std::vector fails with `data_must_be_null_terminated` HOT 2
- error_on_unknown_keys does not provide any info about the key in error_ctx HOT 2
- GLZ_FLATTEN adds significant compilation time on MSVC. HOT 3
- error HOT 2
- GLZ_FLATTEN adds significant compilation time on gcc. HOT 12
- host_include -> file_include -> fails parsing with `expected_comma`
- std::array<char> partial read handling HOT 9
- Binary (BEVE) support lacking for object keys HOT 8
- Type selection when reading to a variant HOT 1
- Update to v3.2.2 causes compilation errors HOT 9
- new_lines_in_arrays option should apply to writing JSON and not just prettify_json
- std::pair of structs fails round trip HOT 2
- Any struct with any members named "first" and "second" in any order is treated as a std::pair HOT 4
- can't write enum with the highest value HOT 4
- There seems to be an error. HOT 10
- Possible bug following examples in the README? HOT 1
- _GLIBCXX_DEBUG for libstdc++ cannot currently be used with glaze HOT 1
- Compilation error on 32-bit system HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from glaze.