如何在JSON中搜索值键并返回嵌套数据?

时间:2016-10-08 18:44:05

标签: angularjs json

以下块是我的JSON。 -KTYLrHDHt234rFDNHrm 类型哈希值由客户端提供的API生成。我认为他们正在使用Firebase。

我在URL中传递一个查询,其中包含每个嵌套对象的pageId。

示例https://cms.app.io/edit/Nike3243

但是由于哈希是自动生成的,我如何搜索所有JSON并检查 pageId 是否与我的Angular路由匹配,然后只返回同一孩子的值。

{
    "-KTYLrHDHtdq23423NHrm": {
        "pageCreation": "10/8/2016, 14:14:22 PM",
        "pageGallery": {
            "slider_1_img": "http://",
            "slider_2_img": "http://",
        },
        "pageId": "Nike13243",
        "pageName": "Nike Campaign 1",
        "store": "11"
    },
    "-KTYLrHDHtdqirFDNHrm": {
        "pageCreation": "10/8/2016, 12:14:22 AM",
        "pageGallery": {
            "slider_1_img": "http://",
            "slider_2_img": "http://",
        },
        "pageId": "Nike323243",
        "pageName": "Nike Campaign 2",
        "store": "12"
    },
    "-KTYLrHDHt234rFDNHrm": {
        "pageCreation": "10/8/2016, 13:14:22 PM",
        "pageGallery": {
            "slider_1_img": "http://",
            "slider_2_img": "http://",
        },
        "pageId": "Nike3243",
        "pageName": "Nike Campaign 3",
        "store": "13"
    }
}

所以我想只返回 Nike3243 的数据,但我想返回商店,滑块和pageName。我怎么能这样做,因为KTYLrHDHt234rFDNHrm哈希是我永远不会知道的东西

cmsApp.controller('pages-edit', function ($scope, $http, $routeParams) {

    var pageIdU = $routeParams.id;

    $http.get(firebase_url+'cms/home.json'+randstatus).success(function(data) {
        $scope.pages = data;
        // this would be pageId = Nike3243
        console.log(data.pageIdURI.pageName[pageId]);
    });
});

由于

2 个答案:

答案 0 :(得分:0)

假设您的对象名为'objTest',您可以执行以下操作:

    var strPageId = 'The page id to find', objFound;

    for( var strKey in objTest ) {
       var objTemp = objTest[strKey];
       if ( objTemp['pageId'] == strPageId ) {
         objFound = objTemp;
         break;
       }
    }
    if ( typeof objFound == "object" ) {
    //Do something...object has been found!
    }

我实际上是这样做的:

$.each(data, function (bb) {
          var crossReference = data[bb].transId;
          if (crossReference==pageIdUri) {
            $scope.transNameEn = data[bb].transNameEn;
            $scope.transNameArabic = data[bb].transNameArabic;
            $scope.transCreation = data[bb].transCreation;
            $scope.transModified = data[bb].transModified;
            $scope.notes = data[bb].notes;
          }
        });

答案 1 :(得分:0)

您可能更容易简单地转换数据,而不是一遍又一遍地执行此搜索。您可以循环访问数据一次并以正确的格式获取数据。

我会做类似的事情:

var recordLookup = {};
for (var id in records) {
  var pageId = records[id].pageId;
  recordLookup[pageId] = record[id];
  recordLookup[pageId].originalId = id;
}

这样您现在可以通过其页面ID轻松查找任何记录。如果您需要以原始形式将数据发送回服务器,您仍然拥有原始ID,并且可以执行您需要的任何操作,以便以正确的格式获取数据。通过这种方式,您可以循环一次或两次,(一次进行查找,一次在操作结束时恢复),而不是任何时候需要从记录中获取数据。