Comments (10)
Don't think it is a simplification. User will need to keep an addition state - the last write result.
from json.
Off topic:
Why write()
? parse()
would be more logical for me. Parser is for reading. write()
is appropriate for serializer (output)
from json.
User will need to keep an addition state - the last write result
Users have to observe that anyway, since they need to check the error code. 99% of users don't care about processing additional data which lies past the JSON, so this is certainly a simplification. We still get the same features but with fewer functions. Having the proliferation of functions was confusing.
To be clear consider this input string: "[ 1, 2, 3 ] #abc"
There is a JSON followed by something that isn't a JSON. The parser can handle this, it will simply return 12 indicating that 12 characters were consumed, and the error will be set to error::extra_data
. Almost all users will want to consider this an error, since the input string is not valid JSON. The users which want to process the remaining string (the "#abc") as something other than JSON, can easily do so by checking for the error and then handling the remaining part of the buffer themselves.
from json.
What about truncated input? Like:
"{ a: ...." // ok
" ... [ 1, 2" // ok
---EOF--- // ??? what we supposed to do here?
from json.
I don't understand the question here.
"{ a: ..." is not valid JSON, the key needs to be a string (i.e. in double quotes).
If you can write out exactly what is in each buffer, that would be helpful. For example consider this json:
json::value jv = { 1, 2, 3 };
This produces an array which serializes to the string "[1,2,3]"
.
We can parse this in two buffers thusly:
json::parser p;
p.write( "[1," );
assert( ! p.is_complete() );
p.write( "2,3]" );
assert( p.is_complete() );
A number however, needs a call to finish:
json::parser p;
p.write( "1" );
assert( ! p.is_complete) );
p.write( "0" );
assert( ! p.is_complete) );
p.finish();
assert( p.is_complete() );
assert( number_cast<int>(p.release()) == 10 );
If the end of the buffer is indicated (from a call to finish
) and the resulting JSON is incomplete, then an error is returned:
error_code ec;
json::parser p;
p.write( "[" );
p.finish( ec );
assert( ec ); // incomplete JSON
from json.
...
means some omitted part of valid JSON. OK, full example:
{ "a" : 1,
"b" : "abc"
--EOF--
How to correctly process this without finish()
that you want to kill?
from json.
How to correctly process this without finish() that you want to kill?
I only removed one overload of finish
, the one which takes the buffer as a parameter. We still have finish
with no parameters, which is necessary in your example above.
from json.
Ah... Ok, undestand now.
we dont need finish()
sounded too radical for me :-)
from json.
sounded too radical for me :-)
Heh, I should have been more clear. Note, that there were previously eight member functions (2 each of write_some, write, finish, and finish, one for errors and one for exceptions).
from json.
This is done
from json.
Related Issues (20)
- Exception of segment fail when run value_from for tree structuor HOT 2
- boost::json::value_to on std::bitset? HOT 6
- Regression: serializing vector<> of objects HOT 4
- Linux gcc compilation failures with --pedantic-errors flag: error: extra ‘;’ HOT 1
- Value Iteration HOT 5
- Question: how to determine the required size for temp buffers? HOT 7
- If an unsigned integer is serialized, deserializing back to the unsigned integer fails HOT 8
- Comment Only: Logo HOT 3
- Stack exaustion while value_from(std::filesystem::path) HOT 5
- Small help for non eagle eyed people HOT 2
- Documentation inconsistency about exceptions HOT 2
- Add a convenience member function to call value_to HOT 5
- boost::json::value::is_uint64() behaves unintuitively HOT 6
- Add support to universal tag_invoke for class as struct with macro BOOST_DESCRIBE_CLASS HOT 10
- Unable to extract boolean value in numberic format HOT 1
- Add a shorthand to masquerade a type parsing/serializing HOT 1
- Allow unknown described class members with a parse option HOT 5
- Null-dereference warning in value_to HOT 2
- Error in parse_into() Error: unknown name or Error: incomplete JSON HOT 2
- Backwards compatibility? (new structure definitions but old json serialization) HOT 17
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 json.