按名称引用JSON对象

时间:2012-02-01 12:07:52

标签: jquery json

我的标记,我使用$ .parseJSON获取JSON(将单引号替换为double后):

<a href="#" data-thumbslide="
  [{'slides':
    [
      { 'path' : 'img/slider-images/jeep_1.jpg' },
      { 'path' : 'img/slider-images/jeep_2.jpg' },
      { 'path' : 'img/slider-images/jeep_3.jpg', 'fullscreen' : 'img/slider-images/jeep_3-fs.jpg' },
      { 'path' : 'img/slider-images/jeep_4.jpg', 'fullscreen' : 'img/slider-images/jeep_4-fs.jpg'}
    ],
  },
  {'info':
    [
      { 'blurb' : 'Lorem ipsum dolor sit amet consquiteur' },
      { 'website' : 'http://www.google.co.uk' },
      { 'credits' : 'Warner bros productions' }
    ]
  }]">
  <div class="title"><h1>Jeep</h1></div>
</a>

我得到一个这样的对象:(来自firebug控制台日志的结果)

[Object { slides=[4]}, Object { info=[3]}]

每个对象看起来像这样:

slides object inside JSON object

我可以像这样引用这些对象:

jsonObject[0]['slides'][2].path
jsonObject[1]['info'][0].blurb

但是,我不想依赖数字排序(因此0是&#39;幻灯片&#39; 1是&#39; info&#39;)但是请按名称引用它们而不是不依赖于订单。我想我可以用不同的JSON结构来实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

如果省略外部[]数组括号和几个{}括号,则可以创建相同(非数组)对象的“幻灯片”和“信息”属性:

{
 'slides':
     [
       { 'path' : 'img/slider-images/jeep_1.jpg' },
       { 'path' : 'img/slider-images/jeep_2.jpg' },
       { 'path' : 'img/slider-images/jeep_3.jpg', 'fullscreen' : 'img/slider-images/jeep_3-fs.jpg' },
       { 'path' : 'img/slider-images/jeep_4.jpg', 'fullscreen' : 'img/slider-images/jeep_4-fs.jpg'}
     ],
 'info':
     [
       { 'blurb' : 'Lorem ipsum dolor sit amet consquiteur' },
       { 'website' : 'http://www.google.co.uk' },
       { 'credits' : 'Warner bros productions' }
     ]
}

然后您可以这样访问:

jsonObject['slides'][2].path     // OR jsonObject.slides[2].path
jsonObject['info'][0].blurb      // OR jsonObject.info[0].blurb

'slides'属性需要是一个像你拥有它的对象数组,因为每个项都属于同一类型,但我注意到'info'对象是一个包含各种对象的数组。如果你在'info'中只有一个'blurb','website','credits'(或'whatever')你可以重组那个部分以删除嵌套数组,而不是制作'blurb'等属性。单个嵌套对象:

  {'slides':
    [
      { 'path' : 'img/slider-images/jeep_1.jpg' },
      { 'path' : 'img/slider-images/jeep_2.jpg' },
      { 'path' : 'img/slider-images/jeep_3.jpg', 'fullscreen' : 'img/slider-images/jeep_3-fs.jpg' },
      { 'path' : 'img/slider-images/jeep_4.jpg', 'fullscreen' : 'img/slider-images/jeep_4-fs.jpg'}
    ],
  'info': {
      'blurb' : 'Lorem ipsum dolor sit amet consquiteur',
      'website' : 'http://www.google.co.uk',
      'credits' : 'Warner bros productions'
    }
  }

然后你可以说:

jsonObject['info'].blurb
// or
jsonObject.info.blurb
// or
jsonObject['info']['blurb']
// or
jsonObject.info['blurb']

虽然访问“幻灯片”仍然如上所述。