HipJSON: A high performance implementation of JSON parser with std.json syntax. Used by Redub and Hipreme Engine

Zz Zz at zz.com
Sun Nov 2 10:06:28 UTC 2025


On Thursday, 30 October 2025 at 13:02:16 UTC, Hipreme wrote:
> On Thursday, 30 October 2025 at 12:16:36 UTC, Dennis wrote:
>> On Thursday, 23 October 2025 at 01:50:55 UTC, Hipreme wrote:
>>> Hope you guys enjoy it :)
>>>
>>> https://code.dlang.org/packages/hipjson
>>
>> Very nice! I wonder why you chose to follow std.json's 
>> interface with dynamic objects, rather than an introspection 
>> based `parseJson(T)(ref T obj, string jsonData)` which fills a 
>> struct/class T with values from the json text, ignoring 
>> unknown keys.
>>
>> Can this become a std.json replacement in Phobos v3 (or even 
>> v2)?
>
> Redub uses a cache system in which the hash of an object 
> becomes a key. This does not translate well to structs as they 
> are "random" keys.
>
> Beyond that, dub also does use platform filters such as 
> "dflags-ldc". In which one can make arbitrary combinations, 
> which is also a problem. That being said, dynamic objects are 
> way more flexible.
>
> Another use-case where it doesn't fit very well is for 
> representing file system. Since the filesystem contents are 
> dynamic, that is another reason. This is used for checking 
> valid accessible files in my wasm API.
>
> There is another case in which the dynamic type API is kinda 
> important, which is mostly when you do union types, so one 
> would still need a good representation of it:
>
> ```json
> "directionals": {
>         "move": {
>             "x": [
>                 {"keyboard": "a", "gamepad": "dPadLeft", 
> "value": -1},
>                 {"keyboard": "d", "gamepad": 
> "dPadRight","value": 1},
>                 {"analog": "left", "axis": "x"}
>             ],
>             "y": [
>                 {"keyboard": "w", "gamepad": "dPadUp", "value": 
> -1},
>                 {"keyboard": "s", "gamepad": "dPadDown", 
> "value": 1},
>                 {"analog": "left", "axis": "y"}
>             ]
>         }
>     }
> ```
>
> For my input API, it also receives arbitrary actions which can 
> be referenced to the player, and in an array of an union type 
> of either a value or an axis. Really complicates the algorithm. 
> And also I wanted a std.json API since I was already using it 
> in my projects, so it makes it much easier to migrate.
>
> As a final input, I also don't really like using templated 
> code. It is also very easy to create a deserialization function 
> based on a struct, so, if one day I decide to add that API, it 
> will be a 0 effort migration.

Thanks for hipjson.

Zz




More information about the Digitalmars-d-announce mailing list