json解析:GET元素,如果它们存在于插入中的每个元素中

时间:2014-02-09 11:13:23

标签: json parsing multidimensional-array

我需要从我的json FB文件中获取所有数据。 例如,一些插入,很少的字段有“喜欢”,但其他字段没有。 我需要检查“喜欢”字段是否存在

我的数据的一个例子是:

{
"userdata": 
[
{
    "id": "xxxxxxxxxxxxxxxxxxxx",
    "from": {
      "name": "my name",
      "id": "xxxxxxxxxxxxxxxxxxxx"
    },
    "message": "Hello",
    "actions": [
      {
        "name": "Comment",
        "link": "https://www.facebook.com/"
      },
      {
        "name": "Like",
        "link": "https://www.facebook.com/"
      }
    ],
    "privacy": {
      "description": "Friends",
      "value": "ALL_FRIENDS",
      "friends": "",
      "networks": "",
      "allow": "",
      "deny": ""
    },
    "type": "status",
    "status_type": "mobile_status_update",
    "application": {
      "name": "Graph API Explorer",
      "id": "xxxxxxxxxxxxxxxxxxxx"
    },
    "created_time": "2013-12-25T15:22:43+0000",
    "updated_time": "2013-12-25T15:22:43+0000",
    **"likes"**: {
      "data": [
        {
          "id": "xxxxxxxxxxxxxxxxxxxx",
          "name": "friend1"
        },
        {
          "id": "xxxxxxxxxxxxxxxxxxxx",
          "name": "friend2"
        }
      ],
      "paging": {
        "cursors": {
          "after": "xxxxxxxxxxxxxxxxxxxx==",
          "before": "xxxxxxxxxxxxxxxxxxxx=="
        }
      }
    }
  },
  {
    "id": "xxxxxxxxxxxxxxxxxxxx",
    "from": {
      "name": "name3",
      "id": "xxxxxxxxxxxxxxxxxxxx"
    },
    "to": {
      "data": [
        {
          "name": "my name",
          "id": "xxxxxxxxxxxxxxxxxxxx"
        }
      ]
    },
    "message": "hello again! ",
    "actions": [
      {
        "name": "Comment",
        "link": "https://www.facebook.com/xxxxxxxxxxxxxxxxxxxx"
      },
      {
        "name": "Like",
        "link": "https://www.facebook.com/xxxxxxxxxxxxxxxxxxxx"
      }
    ],
    "privacy": {
      "value": ""
    },
    "type": "status",
    "application": {
      "name": "Facebook for iPad",
      "namespace": "fbipad_",
      "id": "xxxxxxxxxxxxxxxxxxxx"
    },
    "created_time": "2013-12-17T20:34:04+0000",
    "updated_time": "2013-12-17T20:34:04+0000"
  }
]
}

我使用以下代码,但我只获得第一次插入而不是两者都是因为第二次没有“喜欢”字段。

<script>
$(document).ready(function(){
});
$("#loaduserdata").click(function(){
$("#userdata tbody").html("");
$.getJSON("js.json", function(data){
        $.each(data.userdata, function(i,user){
            var tblRow =
                "<tr>"
                +"<td>FEED FROM: "+user.from.name+"</td>"
                +"<td>MESSAGE: "+user.message+"</td>"
                +"<td>created_time: "+user.created_time+"</td>"
                +"<td>updated_time: "+user.updated_time+"</td>"
                + "<td>LIKES TO" + (typeof user.likes.data == "undefined" ? "" :     user.likes.data.map(function(item) { return "  "+item.name; }).join(", "))     + "</td>"
                +"</tr>"
            $(tblRow).appendTo("#userdata tbody");
        });
    }
);
});
</script>

请帮助。

1 个答案:

答案 0 :(得分:0)

您忘记检查user.likes是否存在并且仅检查user.likes.data,但该检查已经引发错误,因为您尝试访问未定义对象的属性数据。

function getLikesFromUser(user) {
    if (user.likes && user.likes.data) {
        return user.likes.data.map(function(item) {
            return item.name;
        }).join(", ");
    } else {
        return "";
    }
}

Fixed Example on Plunker