arrayにするのかobjectにするのか、の話
2020-06-06
何の話かと言うと
データをjsonでつくります。
それを、javascriptで読んだり、
PHPで読んだり、
C++で読んだりするわけなのですが、
データの階層をどうしようかというときに、たまに、この問題にあたります。
こんな感じの話です。
●ARRAYの場合
{
"AR":[
{
"id":"id001"
,"v":"値1です"
,"memo":"雷電為右衛門"
}
,{
"id":"id002"
,"v":"値2だよ"
,"memo":"谷風梶之介"
}
]
}
●OBJECTの場合
{
"OBJ":{
"id001":{
,"v":"値1です"
,"memo":"雷電為右衛門"
}
,"id002":{
"id":"id002"
,"v":"値2だよ"
,"memo":"谷風梶之介"
}
]
}
●ARRAYでの1つ目のmemoへのアクセス
o[“AR”][0][“memo”]
o.AR[0].memo
●OBJECTでの 1つ目のmemoへの アクセス
o[“OBJ”][“id001”][“memo”]
o.OBJ.id001.memo
正解は無いですけどね
まぁどっちでもいいわけですが、
気分的にはARRAYなんですよね。
ただ、アクセスするにはOBJECTの方が断然良い。
もちろん、言語や、データの規模、要するに、
使われ方が変われば正解も変わる
ってことです。ARRAYの場合は、主キーがidなら、idからindexを引っ張るようにしなきゃいけないけれど、
そこはarrayの長さとか、たとえ長くてもデータエントリの方法を工夫(例えば、idでソートしながらエントリするとか)すればよいので、そこのコストを考えることはしなくても良いかなと。
何の話かというと
早い話、
IoTコントローラ1台に対して、階層を含む1つのデータObjectを作りたくて、
HomeServer側は、それをさらにIoTコントローラの台数分ARRAYで持つってことをしたいわけです。
こんな感じかな。
{
"M0":"-------------------------------------------------"
,"GuidS":"66662a34-2a86-4f23-b419-5d6ffe556b18"
,"M1":"-------------------------------------------------"
,"loclIP":"192.168.11.50"
,"title":"妖しいHOMESERVER"
,"coms":[
{
"M0":"-------------------------------------------------"
,"GuidC":"42492a34-2a86-4f23-b419-5d6ffe556b18"
,"M1":"-------------------------------------------------"
,"loclIP":"192.168.11.52"
,"title":"妖しいRoomer"
,"coms":[
{
"subject":"RoomWatch"
,"note":"部屋をWatchしますよ(o^^o)"
,"input":[
{
"type":"button"
,"subtype":"submit"
,"v":1
}
]
,"output":{
"mime":"image/jpeg"
,"decode":"base64"
}
}
]
}
]
}