D言語からObjective-CとCocoaAPIを使いたい

JSONからD言語string配列、NSArray NSString配列に

JSONのデータ形式から、D言語string配列とNSString配列のNSArrayに変換してみました。

サンプルコード

Powered by Prism

arrayjson/mlb.json

[
    {"Team":"Arizona Diamondbacks",  "Division":"West",    "League":"National"},
    {"Team":"Atlanta Braves",        "Division":"East",    "League":"National"},
    {"Team":"Baltimore Orioles",     "Division":"East",    "League":"American"},
    {"Team":"Boston Red Sox",        "Division":"East",    "League":"American"},
    {"Team":"Chicago Cubs",          "Division":"Central", "League":"National"},
    {"Team":"Chicago White Sox",     "Division":"Central", "League":"American"},
    {"Team":"Cincinnati Reds",       "Division":"Central", "League":"National"},
    {"Team":"Cleveland Guardians",   "Division":"Central", "League":"American"},
    {"Team":"Colorado Rockies",      "Division":"West",    "League":"National"},
    {"Team":"Detroit Tigers",        "Division":"Central", "League":"American"},
    {"Team":"Houston Astros",        "Division":"West",    "League":"American"},
    {"Team":"Kansas City Royals",    "Division":"Central", "League":"American"},
    {"Team":"Los Angeles Angels",    "Division":"West",    "League":"American"},
    {"Team":"Los Angeles Dodgers",   "Division":"West",    "League":"National"},
    {"Team":"Miami Marlins",         "Division":"East",    "League":"National"},
    {"Team":"Milwaukee Brewers",     "Division":"Central", "League":"National"},
    {"Team":"Minnesota Twins",       "Division":"Central", "League":"American"},
    {"Team":"New York Mets",         "Division":"East",    "League":"National"},
    {"Team":"New York Yankees",      "Division":"East",    "League":"American"},
    {"Team":"Oakland Athletics",     "Division":"West",    "League":"American"},
    {"Team":"Philadelphia Phillies", "Division":"East",    "League":"National"},
    {"Team":"Pittsburgh Pirates",    "Division":"Central", "League":"National"},
    {"Team":"San Diego Padres",      "Division":"West",    "League":"National"},
    {"Team":"San Francisco Giants",  "Division":"West",    "League":"National"},
    {"Team":"Seattle Mariners",      "Division":"West",    "League":"American"},
    {"Team":"St. Louis Cardinals",   "Division":"Central", "League":"National"},
    {"Team":"Tampa Bay Rays",        "Division":"East",    "League":"American"},
    {"Team":"Texas Rangers",         "Division":"West",    "League":"American"},
    {"Team":"Toronto Blue Jays",     "Division":"East",    "League":"American"},
    {"Team":"WashingTon Nationals",  "Division":"East",    "League":"National"}
]               
arrayjson/dub.json

{
    "authors": ["hidhok"],
    "description": "A D/Objective-C Cocoa application.",
    "name": "arrayjson",
    "dflags": ["-L-framework", "-LCocoa"],
    "sourceFiles": ["../cocoa/strings"]
}               
arrayjson/source/app.d

/** 
 *		arrayjson/source/app.d     Version 0.0.1
 */
module arrayjson.main;
import core.attribute : selector;
import std.stdio;
import std.json;
import std.file;
import cocoa.strings;

void main(string[] args) {
	string mlbStr, tempStr;
	try {
		tempStr = readText("mlb.json");
	} catch(Exception e) {
		writeln(e.message);
		return;
	}
	mlbStr = tempStr;
	JSONValue mlbJson = mlbStr.parseJSON;
	ulong mlbN = mlbJson.array.length;
	string[] team, division, league;
	team.length = division.length = league.length = mlbN;

	foreach(i; 0 .. mlbN) {
		team[i]     = mlbJson[i]["Team"].get!string;
		division[i] = mlbJson[i]["Division"].get!string;
		league[i]   = mlbJson[i]["League"].get!string;
	}

	NSArray Team     = team.toNSArray;
	NSArray Division = division.toNSArray;
	NSArray League   = league.toNSArray;

	writefln("MLB 配列要素数 %2d個", mlbN);
	writeln("NSArray --- Team --------- Division --- League");
	foreach (i; 0 .. mlbN) {
		writefln(" %2d  %-22s  %-8s  %-8s", i + 1,
			Team.atIndex(i).toDs, 
			Division.atIndex(i).toDs,
			League.atIndex(i).toDs);
	} 
}

NSArray toNSArray(string[] string_array) {
	NSMutableArray temp = NSMutableArray.array;
	foreach (i; 0 .. string_array.length) {
		temp.add(string_array[i].toNs);
	}
	return temp.copy;
}               
Terminal

(base) hidhok arrayjson % dub
    Starting Performing "debug" build using /Library/D/dmd/bin/dmd for x86_64.
    Building arrayjson ~master: building configuration [application]
     Linking arrayjson
     Running arrayjson 
MLB 配列要素数 30個
NSArray --- Team --------- Division --- League
  1  Arizona Diamondbacks    West      National
  2  Atlanta Braves          East      National
  3  Baltimore Orioles       East      American
  4  Boston Red Sox          East      American
  5  Chicago Cubs            Central   National
  6  Chicago White Sox       Central   American
  7  Cincinnati Reds         Central   National
  8  Cleveland Guardians     Central   American
  9  Colorado Rockies        West      National
 10  Detroit Tigers          Central   American
 11  Houston Astros          West      American
 12  Kansas City Royals      Central   American
 13  Los Angeles Angels      West      American
 14  Los Angeles Dodgers     West      National
 15  Miami Marlins           East      National
 16  Milwaukee Brewers       Central   National
 17  Minnesota Twins         Central   American
 18  New York Mets           East      National
 19  New York Yankees        East      American
 20  Oakland Athletics       West      American
 21  Philadelphia Phillies   East      National
 22  Pittsburgh Pirates      Central   National
 23  San Diego Padres        West      National
 24  San Francisco Giants    West      National
 25  Seattle Mariners        West      American
 26  St. Louis Cardinals     Central   National
 27  Tampa Bay Rays          East      American
 28  Texas Rangers           West      American
 29  Toronto Blue Jays       East      American
 30  WashingTon Nationals    East      National
(base) hidhok arrayjson %
                
cocoa/strings.d