ASPjson 中的嵌套数组

Nested Arrays in ASPjson

使用https://www.aspjson.com/解析写入JSON

我有一个组织的数据结构。 这些信息之一是他们的物理位置。每个位置可以有多个房间。 但是当我尝试编写代码以在每个位置项中创建房间时,出现错误:Object required: 'JSON.data(...).

这是我到目前为止成功编写的代码:

{
  "locations": [{
      "locationid": 524,
      "locationname": "test building"
    },
    {
      "locationid": 525,
      "locationname": " building 1"
    },
    {
      "locationid": 526,
      "locationname": "test building 2"
    },
    {
      "locationid": 527,
      "locationname": "test building 3"
    },
  ]
}

我想做的是在每个位置项中创建一个“房间”集合,就像下面这样,但是在尝试创建第二个嵌套房间数组时出现上述错误。 (见下面我的代码)

    {
      "locationid": 527,
      "locationname": "test building 3",
      "rooms" :[
        {
          "roomid": 111,
          "roomname": "room 1 "
        },
        {
          "roomid": 222,
          "roomname": "room 2"
        },
      ]
    },

// additional locations follow ...

我当前的代码:

          .Add "locations", JSON.Collection()
          With JSON.data("locations")

                 .Add 0, JSON.Collection()
                 With .item(0)
                       .Add "locationid", 111
                       .Add "locationname", "location 1"

                       .Add "rooms", JSON.Collection()
                       With JSON.data("rooms")  /// this is where I get the error. 

             .Add 0, JSON.Collection()
              With .item(0)
                  .Add "roomid",  1
                  .Add "roomname", "room1"
             end with 

             .Add 1, JSON.Collection()
              With .item(1)
                  .Add "roomid",  2
                  .Add "roomname", "room2"
              end with 



                       end with
                 end with
          
          end with

您需要遵循对象的结构 JSON.data("rooms") 将不存在,因为 JSON.data() 正在从 JSON 结构的根读取。添加 rooms 集合后,您需要从该实例开始工作,因为当前 .Item 实例是添加 rooms 集合的上下文。所以这条线应该是;

With .Item("rooms")

不是您问题的直接答案,但值得深思。

json2.js 添加到 ASP 页面后:

<script runat="server" language="JScript" src="json2.js"></script>

不再需要弯着腰去工作JSON;你真的只需要写下来。

<script runat="server" language="JScript">
var data = {
  "locations": [{
    "locationid": 526,
    "locationname": "test building 2"
  },
  {
    "locationid": 527,
    "locationname": "test building 3"
  }
]};

for (var i = 0; i < data.locations.length; i++) {
  data.locations[i].rooms = {
    "rooms": [{
      "roomid": 111,
      "roomname": "room 1"
    },
    {
      "roomid": 222,
      "roomname": "room 2"
    }]
  };
}

Response.Write(JSON.stringify(data, null, 2));    
</script>

JScript 块和 VBScript 块可以在同一页面中共存。他们甚至可以调用彼此的功能。在 JScript 块中做 JS 语法容易的事情,在 VBScript 块中做 VB 语法容易的事情。