import std.algorithm : map;
import std.container.array;
import std.stdio : writeln;
import std.typecons : Tuple, tuple;
string apidata1 = `{"items": [
{"name":"T01","hostname":"test01","pool":"Development"},
{"name":"T02","hostname":"test02","pool":"Quality"},
{"name":"T03","hostname":"test03","pool":"Production"}
string apidata2 = `{"items": [
{"hostname":"test01","type":"S"},
{"hostname":"test02","type":"M"},
{"hostname":"test04","type":"L"}
string apidata3 = `{"items": [
{"type":"S","location":"SL"},
{"type":"M","location":"ML"},
{"type":"L","location":"LL"}
Array!string[string] data;
auto jv1 = parseJson(apidata1);
foreach (ref j; jv1["items"].byElement())
data.require("Name", Array!string()) ~= j["name"].get!string("N/A");
data.require("HostName", Array!string()) ~= j["hostname"].get!string("N/A");
data.require("Pool", Array!string()) ~= j["pool"].get!string("N/A");
auto jv2 = parseJson(apidata2);
foreach (ref j; jv2["items"].byElement())
if (data["HostName"][c1] == j["hostname"].get!string("N/A"))
data.require("Type", Array!string()) ~= j["type"].get!string("N/A");
data.require("Type", Array!string()) ~= "N/A";
auto jv3 = parseJson(apidata3);
foreach (ref j; jv3["items"].byElement())
if (data["Type"][c2] == j["type"].get!string("N/A"))
data.require("Location", Array!string()) ~= j["location"].get!string("N/A");
data.require("Location", Array!string()) ~= "N/A";