官术网_书友最值得收藏!

Using the std.json module

JSON is a common data interchange format used on the Web. Phobos has a std.json module that can be used to read and write JSON data. The std.json module is an old module that doesn't take advantage of many of D's advanced features, making it somewhat difficult to use. While newer JSON libraries exist for D, including ones that can be used with syntax and convenience, which is extremely similar to JavaScript itself, Phobos has not yet adopted any of them. Here, we'll read a JSON string, print the current contents, add a new field, and then print out the new JSON.

How to do it…

Suppose we're consuming a web API that returns an array of person objects with a name and ID field. We get the following JSON string from the API:

[{"name":"Alice","id":1},{"name":"Bob","id":2}]

Let's execute the following steps to use the std.json module:

  1. Parse the JSON string.
  2. Loop over the array, getting objects out.
  3. Print the information we need, getting the types out of the web API's specification.
  4. Create the new object.
  5. Append the new object to the list.
  6. Print out the JSON representation.

The code is as follows:

void main() {
    import std.json, std.algorithm, std.stdio;
    auto list = parseJSON(`[{"name":"Alice","id":1},{"name":"Bob","id":2}]);
    foreach(person; list.array.map!(a => a.object)) {
         writeln("ID #", person["id"].integer, " is ", person["name"].str);
    }
    JSONValue newPerson;
    JSONValue[string] obj;
    obj["name"].str = "Charlie";
    obj["id"].integer = 3;
    newPerson.object = obj;
    list.array = list.array ~ newPerson;; // append it to the list
    writeln(toJSON(&list)); // print out the new json
}

It will print the following output:

[{"name":"Alice","id":1},{"name":"Bob","id":2},{"name":"Charlie","id":3}]

How it works…

Phobos' std.json module provides a tagged union to represent a dynamic JSONValue. To use it, you can explicitly check the type with the type property, or simply access the type you need through its str, object, array, integer, and other properties. It will throw an exception if you try to access a property of the wrong type. You can query the current type with the type property.

Array elements in std.json are also JSONValues, which means they need to be accessed through the type properties. That is why we called map on the array. We can't work directly with JSONValue, so mapping it to an object gives something we can immediately use. The map function is a function from std.algorithm that calls the given predicate on each element in the array.

JSONValue properties are either read or write. We cannot modify them in-place. Instead, we read the data or create a temporary file to do our edits then set the finished data back to it.

Finally, toJSON takes a pointer to a root element and returns the JSON string it represents.

See also

主站蜘蛛池模板: 新野县| 孟村| 丹巴县| 和政县| 平和县| 苏尼特左旗| 深圳市| 柳江县| 车致| 疏附县| 长沙市| 安丘市| 大庆市| 桃园市| 佛冈县| 遂溪县| 黑山县| 博客| 蕲春县| 出国| 项城市| 太仆寺旗| 汉源县| 南安市| 西充县| 聂荣县| 延川县| 搜索| 沙坪坝区| 尉犁县| 仲巴县| 长顺县| 乌鲁木齐市| 河津市| 子长县| 安图县| 肥乡县| 敦煌市| 库尔勒市| 曲麻莱县| 菏泽市|