April 10, 2021

Hello everyone,

I want to iterate over the JSON using CTFE. I have tried both std.json and vibe.data.json, but there is no luck. I am not sure what I am missing.

import std.stdio;
import std.json;
import std.array;
import vibe.data.json;

void main()
{
	enum string config = `{ "ModelNames": [ "Bank", "Biller", "Aggregator" ] }`;
	const auto c1 = parseJSON(config);
	immutable auto c2 = parseJsonString(config);
	
	foreach (key; c1["ModelNames"].array)
		writeln(key.get!string);

	foreach (key; c2["ModelNames"])
		writeln(key.get!string);

	// static foreach (key; c1["ModelNames"].array)
	// 	pragma(msg, key.get!string);

	// static foreach (key; c2["ModelNames"])
	// 	pragma(msg, key.get!string);
}
April 10, 2021

On Saturday, 10 April 2021 at 14:03:55 UTC, Tariq Siddiqui wrote:

>

Hello everyone,

I want to iterate over the JSON using CTFE. I have tried both std.json and vibe.data.json, but there is no luck. I am not sure what I am missing.

import std.stdio;
import std.json;
import std.array;
import vibe.data.json;

void main()
{
	enum string config = `{ "ModelNames": [ "Bank", "Biller", "Aggregator" ] }`;
	const auto c1 = parseJSON(config);
	immutable auto c2 = parseJsonString(config);
	
	foreach (key; c1["ModelNames"].array)
		writeln(key.get!string);

	foreach (key; c2["ModelNames"])
		writeln(key.get!string);

	// static foreach (key; c1["ModelNames"].array)
	// 	pragma(msg, key.get!string);

	// static foreach (key; c2["ModelNames"])
	// 	pragma(msg, key.get!string);
}

Thanks to Vladimir, the problem is solved by his advice.

import std.algorithm.iteration;
import std.stdio;
import std.json;
import std.array;
import vibe.data.json;

void main()
{
    enum string config = `{ "ModelNames": [ "Bank", "Biller", "Aggregator" ] }`;
    immutable auto c1 = parseJSON(config);
	immutable auto c2 = parseJsonString(config);
	
	static foreach (key; c1["ModelNames"].array.map!(item => item).array)
        pragma(msg, key.get!string);

	static foreach (key; c2["ModelNames"].array.map!(item => item).array)
		pragma(msg, key.get!string);
}