On Wednesday, 13 November 2013 at 06:16:07 UTC, Rob T wrote:

I need my Gtkd application to maintain a (possibly big) archive database of financial records downloaded daily from the server application. In my case JSON seems to be the most convenient format. Please let me know if, according to you, std.json will cast aside as std.xml.

...

I guess that I'm saying is that while std.json is rock solid and very fast, you may want to consider better alternatives to the json format unless there's a technical reason why json must be used.

Have fun :)

--rt

Well first thank you for sharing your experiences.

You mentioned that a) std.json is solid and fast and b) it's not due to be deprecated. You've really helped me to make my choice. I'm going to use that module. It'd be easier to implement the retrieval of data from the server application side which is written in PHP. For example, a simple `json_encode($bigDataObject)` would be fair enough to send data to the desktop application.

I agree that the API std.json is not sexy. But if it is reputed solid and fast, why just not keep it, gently fix possible bugs, and for those who need more fancy access to the JSON data, wrap it in some kind of std.json.helper or similar extension. Jonathan mentioned above that it is not range-based which is a lack as ranges are one of the paradigms of D. IMO, it's important to have a stable standard library onto which one can build real applications programs in D. Too much forking is bad.

BTW I've tested the use of std.json with import std.parallelism and it works. It's a pretty good news. The example below is borrowed from Ali.

import std.stdio;
import std.json;
import std.conv;
import std.file;
import std.random;
import std.parallelism;
import core.thread;

struct Employee
{
  int id;
  string firstName;
  string lastName;

  void initStuf(JSONValue employeeJson)
  {
    writefln("Start long task for Employee %s", id);
    JSONValue[string] employee = employeeJson.object;           
    firstName = employee["firstName"].str;
    lastName  = employee["lastName"].str;
    Thread.sleep(uniform(1, 3).seconds); // Wait for a while
    writefln("Done long task for Employee %s", id);
  }
}

void main()
{
  auto content =
    `{"employees": [
       { "firstName":"John" ,   "lastName":"Doe"},
       { "firstName":"Anna" ,   "lastName":"Smith"},
       { "firstName":"Peter" ,  "lastName":"Jones"},
       { "firstName":"Kim" ,    "lastName":"Karne"},
       { "firstName":"Yngwee" , "lastName":"Malmsteen"},
       { "firstName":"Pablo" ,  "lastName":"Moses"}               ]
      }`;

  JSONValue[string] document = parseJSON(content).object;
  JSONValue[] employees = document["employees"].array;
  uint employeeId = 0;

  foreach (employeeJson; parallel(employees))
    {
      auto e = Employee( employeeId++ );
      e.initStuf( employeeJson );
    }
}

Gives :

Start long task for Employee 0
Start long task for Employee 4
Start long task for Employee 5
Start long task for Employee 1
Start long task for Employee 3
Start long task for Employee 2
Done long task for Employee 4
Done long task for Employee 5
Done long task for Employee 1
Done long task for Employee 3
Done long task for Employee 0
Done long task for Employee 2








Reply via email to