arrayにするのかobjectにするのか、の話

何の話かと言うと

データを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"
          }
        }
      ]
    }
  ]
}

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です