【问题标题】:How can I get json objects without the object number?如何获取没有对象编号的 json 对象?
【发布时间】:2015-06-23 08:43:19
【问题描述】:

我有一个简单的 json 对象,它吐出 4 个项目,每个项目的属性完全不同。我已经将 json 与称为 meta.work_content 的 4 个对象一起显示,如下所示:

[Object, Object, Object, Object]

我可以在控制台中打开这些对象,如下所示:

0: Object
1: Object
2: Object
3: Object

我可以进一步研究每一个等等。在我的 javascript 中,我有一个简单的 ajax 请求,通过以下设置获取项目:

var getPosts = function() {

        $.ajax({
          url: '/wp-json/posts?type=case-studies',
          data: {
            filter: {
            'name': _last
            }
          },
          success: function ( dataS ) {
            //List some global variables here to fetch post data
            // We use base as our global object to find resources we need
            var base = dataS[0];
            console.log(base);
            var postContent = base.content;
            var postTitle = base.title;
            // Main Image ACF object
            var featuredImage = base.meta.main_image;
            // Gallery ACF object
            var nodes = base.meta.work_content;
            // output ACF objects
            console.log(nodes);
          },
          cache: false
        });

    };

现在棘手的部分来了,我想访问每个 meta.work_content 对象但不使用它来执行它 base.meta.work_content[0], base.meta.work_content[1] 等,因为每个项目的顺序都会改变,所以这些数字将无关紧要。

这些项目需要根据它们的对象名称而不是[0],[1],[2] 进行访问,因为那是行不通的。

干杯

【问题讨论】:

  • 使用一个键来定义每个对象,而不是将所有不同的对象放在一个数组中

标签: javascript jquery json rest


【解决方案1】:

尝试使用以下方法:

$(document).ready(function() {
    var objects = {
        // Key `object1` which contains sertain properties
        object1: { name: "Name" },

        // Key `object2` which contains sertain properties
        object2: { firstname: "Fname" }
    };

    alert(objects.object1.name); // eg Name
    alert(objects.object2.firstname); // eg Fname

    // Check if object exists
    if(objects.object1)
    {
        // Do something with the properties of object1
    }
});

更新

使用您的示例:

success: function ( dataS ) {
    var nodes = dataS; // Eg nodes is like objects in my example above

    // Object 1
    var base = nodes.object1; // Eg object1 is the name of your object
    var postContent = base.content;
    var postTitle = base.title;
    var featuredImage = base.meta.main_image;
},

【讨论】:

  • 这如何与nodes 对象一起工作,并且仍然保留它们进入的顺序?
  • 你的ajax结果的顺序是由你的后端完成的。同样,object1 是第一个还是 object2 是第一个也没关系,您可以根据对象的名称访问对象
  • objects 引用是否与我在上面的代码中使用 nodes 的方式相同?我想说的是我可以做var nodes={object1: { name: "Name" } etc} 并得到相同的结果吗?
  • 在上面查看我的更新,它代表了你必须用你的例子来做这件事的简短方式
  • 请记住,这也是一组复杂的嵌套 json,我认为这行不通。 Nodes 是其中包含多个项目的对象,而不是 dataS
【解决方案2】:
  1. 创建一个对象。
  2. 遍历数组
  3. 获取数组每个成员的名称
  4. 使用与您刚刚获得的名称相同的属性名称将每个成员复制到对象中

然后只使用对象而不是数组。

您可能想考虑如果两个对象具有相同的名称(如果可能的话)会发生什么。

【讨论】:

  • 嗨昆汀,你有一个例子说明以前可能在哪里做过吗? Mivaweb 上面的答案是你的意思吗?
  • @Mdunbavan — 这些步骤中的每一个都是非常非常基础的 JS。哪一个给你带来了问题?
  • 我知道,但更多的是它如何适合我上面所做的事情。我已经得到对象nodes 如果我遍历nodes 的数组,这会影响它们进入的顺序吗?然后最后一点复制对象,这会让事情变得比它需要的更复杂吗?
  • 如果你想通过名称而不是索引来访问它们,那么它当然会影响顺序——你不再按顺序访问它们——但你仍然可以访问原始数组如果你想让它们井井有条。如果按名称访问它们会使您的事情变得更简单,那么将它们复制到一个对象中以便您可以按名称访问它们不会使事情变得更复杂。
  • 我想我会尝试一下。另一种选择是保留索引并仅使用 if 语句在每个项目中查找项目名称并以这种方式为每个项目做一些事情?另一件我忘了提的是对象内部会有多个同名的项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多