jquery - 按名称引用 JSON 对象

标签 jquery json

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

<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 是“幻灯片”,1 是“信息”),而是按名称引用它们,而不是依赖顺序。我想我可以用不同的 JSON 结构来实现这一点?

最佳答案

如果省略外部 [] 数组括号和几个 {} 括号,您可以使“slides”和“info”属性具有相同的属性(非-数组)对象:

{
 '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']

虽然对“幻灯片”的访问仍然如上。

关于jquery - 按名称引用 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095524/

相关文章:

javascript - Vue.js 代码不适用于 Webpack

json - 在 postgresql 查询中展平 jsonb 对象的更好方法是什么

c# - 如何在 C# 上将 MySQL 查询转换为 JSON

java - 从服务器接收测验 JSON 字符串并显示在屏幕上

java - Spring MVC 中的 Jackson Field 过滤器

php - SQLSTATE[23000] : Integrity constraint violation: 1048 Column 'page_id' cannot be null laravel 5

javascript - if 语句在条件失败时运行并与窗口滚动事件绑定(bind)

json - 如何使用 getJSON 加载 Highcharts 选项对象,包括回调属性

javascript - JQuery 在位置插入表格行

javascript - jQuery .ajax() 访问 javascript 循环中的 beforeSend 局部变量