2016-10-08 136 views
0

下面的块是我的JSON。 -KTYLrHDHt234rFDNHrm类型哈希由客户端提供的API生成。我认为他们正在使用Firebase。如何搜索JSON作为值键并返回嵌套数据?

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

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

但由于哈希是自动生成的我怎么能在所有的JSON搜索和检查PAGEID符合我的角路线,然后只返回同一个孩子的价值观。

{ 
    "-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的数据,但我想回到商店,滑块和页面名称。我怎样才能做到这一点,因为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]); 
    }); 
}); 

感谢

回答

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; 
      } 
     }); 
0

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

我会做这样的事情:

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

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