スキップしてメイン コンテンツに移動

JSON のオブジェクトを ID でリンクする

複数のプロパティに同じ値のオブジェクトを設定するのは面倒だし同じであることがわかりにくい。


{"prop1":{"value":12345},


 "prop2":{"value":12345},


 "prop3":{"value":12345}}


 


いちいち同じ値のオブジェクトを記述しないで、共通のオブジェクトを参照したくなりました。


あれ={"value":12345}


{"prop1":あれ, "prop2":あれ, "prop3":あれ}


 


 そこで、 ID というプロパティを持たせて、オブジェクトを ID で表せないか考えました。


共通のオブジェクトを指定したい場合は、そのプロパティにオブジェクトの ID を指定します。


{"id":"hoge", "value":12345}


{"prop1":"hoge", "prop2":"hoge", "prop3":"hoge"}


 


ID といってもただの文字列なので、読み込み側でオブジェクトが指定されるはずのプロパティで文字列があったら、その文字列を ID とするオブジェクトを割り当てる処理が必要です。


 「オブジェクトが指定されるはずのプロパティ」かどうかを判別する手段として、あらかじめ読み込み側に教えておくか、プロパティ名にプレフィックスなどをつけて表すことが考えられます。


さらに何かないかと調べていると、JSON のハイパースキーマ仕様には参照型というものがある事を知りました。


JSONだってハイパーメディア -- JSONハイパースキーマ仕様をなんとかしたい - 檜山正幸のキマイラ飼育記


URL をただの文字列ではなく "$ref" というプロパティの値として指定することで、その文字列が参照であることを表します。


 


これを先ほどの例に適用すると、さきほどよりも参照であることが明確にわかるようになりました。


{"id":"hoge", "value":12345}


{"prop1":{"$ref":"hoge"}, "prop2":{"$ref":"hoge"}, "prop3":{"$ref":"hoge"}}


 


$ref をいちいち打つのが面倒とか思ってしまいそうですが、今後も特別な意味を持つ文字列を扱いたい場合などにこの方法は有効だと思いました。


直接の関係はありませんが、ECMA script 5 の property descriptor も値をオブジェクトに包んで情報を付加しています。


 


これならば読み込み側でプロパティによって処理を変える必要はないので、扱うデータによって読み込み側を変更する必要はありません。


「$ref プロパティだけのオブジェクト」が値の場合は参照として処理すればよいだけです。


 


今日は仕様をある程度形にできました。明日は実装までいきたいです。


JavaScript 自体まだ不慣れなところがありますが、テストケースのフレームワークがあればそれを使ってみたいです。


 


コメント

このブログの人気の投稿

QTableView で表を表示してみる

タイトルは駄洒落を狙っているわけではありません。 こんばんわ SakuraCrowd です。 今回は今作っているソフトの経過報告です。 最近のブログのパターンは、 「XXX作ったよ。これがスクリーンショットね。あとこんなこと思ったよ。」 という流れですが、 今日はできていないソフトの部分的な話なので、 いつもよりもプログラムちっくな話になると思います。(´Ծ_Ծ´)メガネノトキハマジメブッテル QTableView は GUIライブラリ Qt のクラスです。 それを Python で使うための PySide というライブラリを使っています。 某表計算ソフト っぽい表の GUI です。 このデータの日付が 09/01 なのでおそらくその日に   QTableView 使うぞ!(`・ω・´) とサンプルデータを作ったのでしょう。 Qt Designer という GUI エディタを使うとポトペタでウィンドウを設計できます。 選択できる GUI の中に QTableView と QTableWidget があります。 どちらも上のような表の GUI です。 QTableWidget は 簡単 に値をいれたりできます。 Qt Designer 上で直接編集 することができるので、 サンプルの表を簡単に作ることができます。 それに対して、 QTableView は Qt Designer 上では値を編集できません。たぶん。 QTableView の強みは MVC の構造 を使えることです。 名前のとおり QTableView は View です。 これにデータを管理している Model オブジェクトを設定して使います。 Model クラスを作る手間がかかりますが、 GUI の細かな操作をしなくても Model に応じた表を表示してくれます。 Model は QAbstractTableModel を 継承 して作ります。 コンストラクタで基底クラスの処理を呼び出し、いくつかの純粋仮想関数をオーバーライドします。 def __init__ ( self , parent= None , *args):...

GrimDawn クロンリーの幹部という名もなき賞金首

 賞金首を倒すのは、短時間で何か達成するにはちょうどいいミッションだ。 今までのバウンティのクエストには、ターゲットのいる場所などが書かれていたのだが、今回はクロンリーの幹部3人を倒せというもの。 今までは、賞金首に名前があったが、幹部3人という表現は何なのだろうと思った。 3人もいるから文章を短縮するために名前を端折ったのか。 それに場所も書かれていないので、ウィキを見たのだけど、よくわからなかったので、とりあえずクロンリーの隠れ家にリフトで移動した。 クロンリーの隠れ家の入り口あたり 隠れ家周辺の可能性もあるけど、クリスタルを埋め込まれたということは、かなりクロンリーの近くにいる気がする。 クロンリーの隠れ家には数体、 HP バーの左右にドクロマークがついているヒーロークラス のやつらがいるので、そいつらのことかもしれないと思った。 一番上にマーティンとか名前がついてるから幹部かなと期待したけど違った そして、マーティン(幹部かなと思ってた)と戦っていたら、いきなり、幹部を倒したというメッセージ。 マーティンは幹部じゃなかったし、いつ幹部をやったかは不明 どうやら、よく見るとたまに MOB っぽい敵の中に幹部と書かれている敵がいるのでそいつらを3体やればよいということらしい。 道中でいつの間にか幹部を3体倒してミッションもクリアしたので、ついでにクロンリーを倒してきた(まだやられそうになりながらだけど、たまに逃げたりしながら時間を数分かければ勝てる)。 クロンリーの隠れ家のマーティンのように名前もなく、「幹部」という肩書だけのMOB。 幹部はもちろん それなりに偉いんだろうけど 、名前もなく、いつの間にかやられるところに、 むなしさを感じた賞金首たち だった。 名前は大事だな。あと雑魚と一緒にしなない程度のタフさがあればよかったのかなと思う。 そろそろストーリーをすすめたいが、いろいろあって、短時間しかできない。 あと、いい装備がでてこなくなってきたのでモチベーションが下がり気味なこともある。 飽きる前に、 Act4 まではすすめたい。 つづく

和風狩ゲー「WildHearts」プレイ日誌(ツイートまとめ)

幻想的な和風のおとぎ話の世界のような雰囲気で始まる、カラクリで戦略が広がる狩ゲー 「 Wild Hearts 」のプレイ感想(主にツイート)のまとめです。 通常価格は1万円近くしますが、Steam のスプリングセールで 85 % オフの 1, 455 円で購入しました。 カラクリは思ったより全然簡単に出せて面白い!幻想的なマップと御伽噺のような獣たち 20250317 https://x.com/SakuraCrowd/status/1901213871937134633 カラクリ(最初はハコ)を一瞬で配置してそれに乗ってジャンプ強攻撃したり、高い壁のぼったりする要素が新しい。 すごく感動したのが、マップのおとぎ話のような幻想的なデザイン。 フィールドには入れる小屋があったり、それを壊されたり、ダイナミックなステージの変化も楽しい #WildHearts 武器強化や図鑑がこれから増えていくのを思うとワクワク!20250316 https://x.com/SakuraCrowd/status/1901215264269906190 武器を細かく強化していけそうなのがわくわくする 野営地に置く鍛冶の施設とかも少しずつ解除して、好きな位置に配置できる あと討伐した敵の情報も倒した数で詳細な情報が見られる #WildHearts 1バトル5分だけどハラハラ!初の武器強化! 20250317   https://x.com/SakuraCrowd/status/1901597289082405135 ハナヤドシを5回狩ると図鑑が詳しくなって、生態の説明の他に、レアなアイテムを落とす部位もわかった。 しっぽの先についている塊に栄養を吸い取られているためにいつも貪欲らしい。 その塊を何とか3回部位破壊して今作れる一番強いからくり刀できた 一戦5分くらいでできるのがいい #WildHearts コハクヌシを倒して氏繁救出!マグマみたいなのは琥珀だったのかー 20250317 鍛冶師のなつめが言っていた、氏繁をコハクヌシから助ける コハクヌシの住処の洞窟の上から声がして、探してたらやられてしまったw そのあとまたその場所に戻ってバトル再開して勝った 氏繁はなんか飄々としていて、まじめななつめとの3人の旅が面白くなりそう #WildHearts カラカラとなったらコダマを探すの...