QtCS2018 Serialisation

From Qt Wiki
Jump to: navigation, search


Binary JSON

  • Was created for qtjsondb
  • fast reading
  • mmap()able
  • Deprecate soon (Qt 5.12?)
    • Remove from QJsonDocument in Qt 6
    • Provide compat API to read
      • BSJON → JSON → parse again


  • Limited to 128 MB of RAM footprint (due to Binary JSON)
  • Needs to be fixed before Qt 6
  • Can use the same backend as QCborValue
  • Complaint: updating in-place is not easy
    • If you update an entry in a node, you have to update the chain leading to it
    • QCborValue has the same problem, as it was designed to have the same API
   QJsonValue foo = ...;
   foo["s"] = "value";             // does not compile
   foo.toObject()["s"] = "value";  // updates the temporary!
   // must write instead:
   QJsonObject fooObject = foo.toObject();
   fooObject["s"] = "value";

Common DOM API?

  • Should we have a common API for manipulating trees of JSON-like values?
  • QCborValue is a superset of QJsonValue
    • But it would be confusing to users to use CBOR classes to manipulate JSON
    • Generic name?
  • What other uses would this API have?
    • Replace QJSValue (QtQml)?
    • Replace QVariantMap?
    • Entry point for a Protobuf API?
  • How to make sure people can't insert combinations not allowed in the output?
    • For example, associative containers using integers as keys in JSON
    • Do they do that? Maybe they won't write such code
      • They know what their content is used for
    • We could use templates, specialising for CBOR, JSON, etc.
    • We could have a wrapper class that has inlines and provides only the possible combinations
  • QCborValue integrated last Friday into QtCore 5.12
    • Need to know in the next few weeks if we keep it for 5.12
    • Can yank it out and move to a new module for Tech Preview

Serialising Qt state

  • Needed by Qt Remote Objects
  • Slightly different from CBOR and JSON purposes
    • Not about a standardised representation of a data model
    • More about transmitting state from two independent processes of the same application
  • Currently using QDataStream
    • Has a lot of problems, can't really detect errors and not extensible enough
  • Need more exploration, no conclusion


  • Need volunteers to write a Proof of Concept
    • plugin to protoc?