On Monday, 1 August 2022 at 05:52:36 UTC, frame wrote:


If the JSON files are already parsed, why you stringify and reparse it?


Because of ...

1. mental block and
2. I didn't know `jsonResult.array = [];`

Many thanks for pointing this out. I tried the following, and didn't work, and hence my earlier convoluted approach:

- `JSONValue[] jsonResult;`
- `JSONValue jsonResult = [];`


A plain array should be also mergeable via `jsonResult.array ~= j.array` (if `j` really is an array, you need to check the type first)


Based in your suggestion, the snippet is now more brief.

```d
module combinejsonv3;

import std.file;
import std.stdio;
import std.json;
import std.array;
import std.algorithm.searching;

    void main()
    {
        // merged JSON to be stored here
        JSONValue jsonResult;
        jsonResult.array = [];

foreach (string filename; dirEntries(".", "*.json", SpanMode.shallow))
        {
            // if filename contains 'output' in it, ignore
            if(canFind(filename, "output")) {
                std.stdio.writeln("ignoring: " ~ filename);
                continue;
            }

            // read JSON file as string
            string content = std.file.readText(filename);

            // parse as JSON
            JSONValue j = parseJSON(content);

            // if JSONType is array, merge
            if(j.type == JSONType.array) {
                // show status to console
std.stdio.writeln("processing JSON array from: " ~ filename);
                jsonResult.array ~= j.array;
            }
        }

        // write to file
std.file.write("output-combined.json", jsonResult.toPrettyString);
    }
```

Thank you!

-ikel

Reply via email to