digitalmars.D.announce - painlessjson released, looking for improvement advice
- Pierre Krafft (34/34) Jan 28 2015 Hi,
- rlonstein (5/17) Jan 28 2015 Not quite the same, but I've been using dson
- BlackEdder (22/25) Jan 29 2015 Did not know about that one. From looking through the source it
- Pierre Krafft (5/33) Jan 29 2015 I believe we should continue using std.json, and instead push for
- Chris (9/46) Jan 29 2015 Yeah, I was wondering, if you have to import std.json and use it
- BlackEdder (14/19) Jan 29 2015 Painlessjson in many ways abstracts away the std.json
- Rory McGuire via Digitalmars-d-announce (5/23) Jan 29 2015 :) I use jsvar for any JSON work in D. Javascript is the only thing I've
- Pierre Krafft (9/48) Jan 29 2015 It's fun to see that there are so many different solutions to
- Vladimir Panteleev (8/16) Jan 31 2015 This is nothing new, I believe Vibe.d has a similar JSON
- data man (3/4) Jan 31 2015 Which, please specify?
- Vladimir Panteleev (4/8) Feb 01 2015 It should tell you nicely when you try to compile without them:
- data man (9/18) Feb 01 2015 Alas, but...
- Vladimir Panteleev (4/11) Feb 01 2015 By "5-ish compiler patches" I meant patches that are not in the
- data man (5/8) Feb 01 2015 Yes, I understand.
- Vladimir Panteleev (6/14) Feb 01 2015 It would be a massive rewrite, and since I won't have the
- Pierre Krafft (20/37) Feb 01 2015 You are right. My intention is not to make it seem like this is
Hi, DUB lacked a package for going between D objects and JSON. painlessjson is a library just released on DUB looking to be the easy solution for converting D data to and from JSON. painlessjson uses templates and traits to generate code that converts to and from std.json. The goals of painlessjson are: - Easy to use and set up - Highly configurable with sensible defaults - Keep the library code simple by not reinventing what others provide for us - Support as many D types as possible Current features are: - Convert to and from std.json, structs and classes with default constructor, arrays, associative arrays, and any type implementing _toJSON + _fromJSON. - Includes property functions - Ignore a field using SerializeIgnore - Rename a field using SerializedName("Name") or SerializedToName('To') SerializedFromName('From') This project gained momentum just recently so there are several things to improve. We want input and help to make this as great as possible. The features that are being designed right now are quite tricky to get right so any help would be greatly appreciated. The project is on github: https://github.com/BlackEdder/painlessjson And on DUB: http://code.dlang.org/packages/painlessjson Our current issues are: - How do we support subclasses? https://github.com/BlackEdder/painlessjson/issues/8 - How should constructors be handled? Don't forget alias this and preferably find the best constructor to use without relying on annotations. https://github.com/BlackEdder/painlessjson/issues/12
Jan 28 2015
On Wednesday, 28 January 2015 at 21:54:06 UTC, Pierre Krafft wrote:Hi, DUB lacked a package for going between D objects and JSON. painlessjson is a library just released on DUB looking to be the easy solution for converting D data to and from JSON. painlessjson uses templates and traits to generate code that converts to and from std.json. The goals of painlessjson are: - Easy to use and set up - Highly configurable with sensible defaults - Keep the library code simple by not reinventing what others provide for us - Support as many D types as possibleNot quite the same, but I've been using dson (https://github.com/w0rp/dson). Have you looked it over?
Jan 28 2015
On Thursday, 29 January 2015 at 00:24:44 UTC, rlonstein wrote:Not quite the same, but I've been using dson (https://github.com/w0rp/dson). Have you looked it over?Did not know about that one. From looking through the source it seems to have a different goal though. dson looks like it is an alternative to std.json. Painlessjson is meant to make it easier to use json, by automatically (de)serializing objects/structs and converting them to (and from) json. For example: class Point { double x; double y; } void main() { auto pnt = new Point( 1,2 ); auto jsonPnt = toJSON( pnt ); // Returns a JSONValue( "{ "x": 1.0, "y": 2.0 }" ) auto nPnt = fromJSON!Point( jsonPnt ); assert( nPnt.x == pnt.x && nPnt.y == pnt.y ); } I guess it would be interesting to use dson instead of std.json as a basis for Painlessjson.
Jan 29 2015
On Thursday, 29 January 2015 at 13:16:48 UTC, BlackEdder wrote:On Thursday, 29 January 2015 at 00:24:44 UTC, rlonstein wrote:I believe we should continue using std.json, and instead push for taking dson (or its lessons learned) into phobos if it's a better implementation. The best general solution should be the one that is available out of the box.Not quite the same, but I've been using dson (https://github.com/w0rp/dson). Have you looked it over?Did not know about that one. From looking through the source it seems to have a different goal though. dson looks like it is an alternative to std.json. Painlessjson is meant to make it easier to use json, by automatically (de)serializing objects/structs and converting them to (and from) json. For example: class Point { double x; double y; } void main() { auto pnt = new Point( 1,2 ); auto jsonPnt = toJSON( pnt ); // Returns a JSONValue( "{ "x": 1.0, "y": 2.0 }" ) auto nPnt = fromJSON!Point( jsonPnt ); assert( nPnt.x == pnt.x && nPnt.y == pnt.y ); } I guess it would be interesting to use dson instead of std.json as a basis for Painlessjson.
Jan 29 2015
On Thursday, 29 January 2015 at 13:44:04 UTC, Pierre Krafft wrote:On Thursday, 29 January 2015 at 13:16:48 UTC, BlackEdder wrote:Yeah, I was wondering, if you have to import std.json and use it as a basis for painlessjson, is it really so big an improvement? Especially since std.json might be replaced (sooner or later). I'd prefer an "easy to use" implementation that replaces std.json completely. (I don't want to slight the work done on painlessjson and it might come in handy here and there. Maybe it could be added to the std.json module?)On Thursday, 29 January 2015 at 00:24:44 UTC, rlonstein wrote:I believe we should continue using std.json, and instead push for taking dson (or its lessons learned) into phobos if it's a better implementation. The best general solution should be the one that is available out of the box.Not quite the same, but I've been using dson (https://github.com/w0rp/dson). Have you looked it over?Did not know about that one. From looking through the source it seems to have a different goal though. dson looks like it is an alternative to std.json. Painlessjson is meant to make it easier to use json, by automatically (de)serializing objects/structs and converting them to (and from) json. For example: class Point { double x; double y; } void main() { auto pnt = new Point( 1,2 ); auto jsonPnt = toJSON( pnt ); // Returns a JSONValue( "{ "x": 1.0, "y": 2.0 }" ) auto nPnt = fromJSON!Point( jsonPnt ); assert( nPnt.x == pnt.x && nPnt.y == pnt.y ); } I guess it would be interesting to use dson instead of std.json as a basis for Painlessjson.
Jan 29 2015
On Thursday, 29 January 2015 at 14:05:25 UTC, Chris wrote:Yeah, I was wondering, if you have to import std.json and use it as a basis for painlessjson, is it really so big an improvement? Especially since std.json might be replaced (sooner or later). I'd prefer an "easy to use" implementation that replaces std.json completely.Painlessjson in many ways abstracts away the std.json implementation, so using it you should rarely/never have to use std.json directly. It basically abstracts away most of the complexity and you should only ever have to use toJSON and fromJSON. This works with built-in types (double/int/string etc.) and also with ranges and associative arrays. On top of that Painlessjson also makes it easy to convert your own types/struct/classes to and from JSON by (de)serializing them automatically (as far as possible). If a better simpler std.json gets developed then we can rebase painlessjson on that and it might become a thinner wrapper, but I would expect the (de)serialization still to be useful in many cases.
Jan 29 2015
:) I use jsvar for any JSON work in D. Javascript is the only thing I've used that is possibly easier to work with JSON values. https://github.com/adamdruppe/arsd/blob/master/jsvar.d On Thu, Jan 29, 2015 at 5:18 PM, BlackEdder via Digitalmars-d-announce < digitalmars-d-announce puremagic.com> wrote:On Thursday, 29 January 2015 at 14:05:25 UTC, Chris wrote:Yeah, I was wondering, if you have to import std.json and use it as a basis for painlessjson, is it really so big an improvement? Especially since std.json might be replaced (sooner or later). I'd prefer an "easy to use" implementation that replaces std.json completely.Painlessjson in many ways abstracts away the std.json implementation, so using it you should rarely/never have to use std.json directly. It basically abstracts away most of the complexity and you should only ever have to use toJSON and fromJSON. This works with built-in types (double/int/string etc.) and also with ranges and associative arrays. On top of that Painlessjson also makes it easy to convert your own types/struct/classes to and from JSON by (de)serializing them automatically (as far as possible). If a better simpler std.json gets developed then we can rebase painlessjson on that and it might become a thinner wrapper, but I would expect the (de)serialization still to be useful in many cases.
Jan 29 2015
On Thursday, 29 January 2015 at 18:47:37 UTC, Rory McGuire wrote::) I use jsvar for any JSON work in D. Javascript is the only thing I've used that is possibly easier to work with JSON values. https://github.com/adamdruppe/arsd/blob/master/jsvar.d On Thu, Jan 29, 2015 at 5:18 PM, BlackEdder via Digitalmars-d-announce < digitalmars-d-announce puremagic.com> wrote:It's fun to see that there are so many different solutions to working with JSON in D. jsvar seems to be for keeping your variables in JavaScript-land, something I think is a bad idea in most cases. The idea of painlessjson is to convert to native D as fast as possible. The goal is to get something like https://github.com/FasterXML/jackson for D. We are still looking for input on how inheritance and constructors should work.On Thursday, 29 January 2015 at 14:05:25 UTC, Chris wrote:Yeah, I was wondering, if you have to import std.json and use it as a basis for painlessjson, is it really so big an improvement? Especially since std.json might be replaced (sooner or later). I'd prefer an "easy to use" implementation that replaces std.json completely.Painlessjson in many ways abstracts away the std.json implementation, so using it you should rarely/never have to use std.json directly. It basically abstracts away most of the complexity and you should only ever have to use toJSON and fromJSON. This works with built-in types (double/int/string etc.) and also with ranges and associative arrays. On top of that Painlessjson also makes it easy to convert your own types/struct/classes to and from JSON by (de)serializing them automatically (as far as possible). If a better simpler std.json gets developed then we can rebase painlessjson on that and it might become a thinner wrapper, but I would expect the (de)serialization still to be useful in many cases.
Jan 29 2015
On Thursday, 29 January 2015 at 20:04:51 UTC, Pierre Krafft wrote:It's fun to see that there are so many different solutions to working with JSON in D. jsvar seems to be for keeping your variables in JavaScript-land, something I think is a bad idea in most cases. The idea of painlessjson is to convert to native D as fast as possible. The goal is to get something like https://github.com/FasterXML/jackson for D. We are still looking for input on how inheritance and constructors should work.This is nothing new, I believe Vibe.d has a similar JSON (de)serializer. Here's my own: https://github.com/CyberShadow/ae/blob/master/utils/json.d Too slow? Try this one instead: https://github.com/CyberShadow/ae/blob/master/utils/serialization/json.d (Caveat: last one needs 5-ish compiler patches to work.)
Jan 31 2015
On Sunday, 1 February 2015 at 06:08:35 UTC, Vladimir Panteleev wrote:(Caveat: last one needs 5-ish compiler patches to work.)Which, please specify?
Jan 31 2015
On Sunday, 1 February 2015 at 07:56:53 UTC, data man wrote:On Sunday, 1 February 2015 at 06:08:35 UTC, Vladimir Panteleev wrote:It should tell you nicely when you try to compile without them: https://github.com/CyberShadow/ae/blob/master/utils/meta/caps.d(Caveat: last one needs 5-ish compiler patches to work.)Which, please specify?
Feb 01 2015
On Sunday, 1 February 2015 at 10:07:42 UTC, Vladimir Panteleev wrote:On Sunday, 1 February 2015 at 07:56:53 UTC, data man wrote:Alas, but... void main() { pragma(msg, is(typeof({ struct S { int i; } S s; __traits(child, s, S.i) = 0; }))); } output "false"On Sunday, 1 February 2015 at 06:08:35 UTC, Vladimir Panteleev wrote:It should tell you nicely when you try to compile without them: https://github.com/CyberShadow/ae/blob/master/utils/meta/caps.d(Caveat: last one needs 5-ish compiler patches to work.)Which, please specify?
Feb 01 2015
On Sunday, 1 February 2015 at 11:12:11 UTC, data man wrote:Alas, but... void main() { pragma(msg, is(typeof({ struct S { int i; } S s; __traits(child, s, S.i) = 0; }))); } output "false"By "5-ish compiler patches" I meant patches that are not in the official compiler. I would be very, very surprised if it worked out of the box for you.
Feb 01 2015
On Sunday, 1 February 2015 at 13:43:19 UTC, Vladimir Panteleev wrote:By "5-ish compiler patches" I meant patches that are not in the official compiler. I would be very, very surprised if it worked out of the box for you.Yes, I understand. You do not plan to modify their for current state of the D repository?
Feb 01 2015
On Sunday, 1 February 2015 at 14:10:58 UTC, data man wrote:On Sunday, 1 February 2015 at 13:43:19 UTC, Vladimir Panteleev wrote:It would be a massive rewrite, and since I won't have the compiler features I want, the code will be twice as bigger/uglier. I'd rather wait until I have time to properly formulate and propose my changes as language improvements. It's a big project and an uphill battle, since it's fairly niche.By "5-ish compiler patches" I meant patches that are not in the official compiler. I would be very, very surprised if it worked out of the box for you.Yes, I understand. You do not plan to modify their for current state of the D repository?
Feb 01 2015
On Sunday, 1 February 2015 at 06:08:35 UTC, Vladimir Panteleev wrote:On Thursday, 29 January 2015 at 20:04:51 UTC, Pierre Krafft wrote:You are right. My intention is not to make it seem like this is new or revolutionary. The intention is to get some input on the work and hopefully provide a solution that in the end will be well documented, easy to find, and easy to integrate with. I don't know why I didn't find the one in vibe.d but it's still bundled with a lot else and uses it's own JSON implementation. Painlessjon was the only library I could find on Github when searching for JSON that I could get working. Almost every library provided their own instead of using std.json.If std.json is bad it should be improved to help everyone using it. The D community need to be better at putting their work on DUB and to separate their libraries more. I know that there are many tools out there that is not fully utilized because it's so hard to find them. I will continue working on painlessjson and will take a look on the implementations I have now found and try to take the best from them. I have already seen some things in your code that I can make use of.It's fun to see that there are so many different solutions to working with JSON in D. jsvar seems to be for keeping your variables in JavaScript-land, something I think is a bad idea in most cases. The idea of painlessjson is to convert to native D as fast as possible. The goal is to get something like https://github.com/FasterXML/jackson for D. We are still looking for input on how inheritance and constructors should work.This is nothing new, I believe Vibe.d has a similar JSON (de)serializer. Here's my own: https://github.com/CyberShadow/ae/blob/master/utils/json.d Too slow? Try this one instead: https://github.com/CyberShadow/ae/blob/master/utils/serialization/json.d (Caveat: last one needs 5-ish compiler patches to work.)
Feb 01 2015