On 13.04.2015 um 01:48 Konstantin Ilchenko wrote:
(...)
but I don't get how to convert
datato any useable type, Variant or associative array, or class instance.I can do
auto data = json["data"]["other"].get!string;But what to do, for example, with array of objects of 10 properties?
auto data = json["data"].to!array;throws
Error: undefined identifier array, did you mean function asArray?
Serializing composite type VariantN!32LU which has no serializable fields
That should be json["data"].get!(Json[]) instead (to!(Json[]) works as well). Maybe adding support for json["data"].get!(Json.Type.object) would be an interesting alternative, though.
auto data = json["data"].to!object;throws
Error: template instance to!(object) does not match template declaration to(T)()
Similarly, should be json["data"].get!(Json[string]).
class Handshake { int some; string other; } auto data = json["data"].to!Handshake;throws
Error: function vibe.data.json.Json.to!(Handshake).to has no return statement, but is expected to return a value of type inout(Handshake)
Error: template instance vibe.data.json.Json.to!(Handshake) error instantiating
This is done with deserializeJson: json["data"].deserializeJson!Handshake
You can process nested structures, arrays, AAs etc. with it. If performance is a concern, this also allows to process the JSON sting directly, without parsing it into a Json value first, so this is the generally recommended way to work with specific JSON structures.