如何访问复杂的JSON

时间:2017-02-09 21:53:40

标签: javascript html arrays json object

我是初学者,当我开始增加JSON的复杂性时,我开始通过访问它来迷惑自己。如何访问以下JSON?我想访问服务的价值和关键

{
  employers:{
    Mike: {
      old: 20,   
      services:{
        cut : {
          value : 10
        }
        hair_straightening : {
            value: 20
        }
      }
    }
    Penny: {
      old: 20,   
      services:{
        cut : {
          value : 10
        }
        hair_straightening : {
            value: 20
        }
      }
    }
  }
}

3 个答案:

答案 0 :(得分:2)

每个人都必须从某个地方开始:)

我不确定我是否完全明白你所追求的是什么,但是这里......

首先,在列出您的密钥时,您的对象上的符号会略显偏离。例如,在Mike和Penny之间,您应该用逗号分隔较大雇主对象中的每个键。

类似的东西:

employers: {
  Mike: {
         ...
    }, //need a comma here
    Penny: {
       ...
    }
}

此外,在每个雇主中,剪辑和发型之间应该有一个逗号。

        services: {
            cut: {
                value: 10
            }, //need a comma here
            hair_straightening: {
                value: 20
            }
        }

现在问你的实际问题...... 要获取每个服务的密钥,可以使用Object.keys()。这个功能可以让你获得给定雇主的钥匙。然后你也可以从同一个函数里面获取值。 (注意这只适用于一个雇主;你只想迭代两者并在每个雇主身上使用相同的功能)

function getServices(employer) {
  var services = employer.services;
  var servicesKeys = Object.keys(services);
  var serviceValueMatrix = [];
  servicesKeys.forEach(function(service) {
    serviceValueMatrix.push([service, employer.services[service].value])
  })
  return serviceValueMatrix;
}
// assuming you had var yourJSON = { employers: {...} }
// getServices(yourJSON.employers.Mike);
// returns [["cut",10], ["hair_straightening",20]]

另外,假设您的JSON对象已经是key:value格式,您可能会以value:10,value:20等格式跳过最后一组对象,而只是创建对象的最后一层类似的东西:

services:{
  cut: 10,
  hair_straightening: 20
}

然后你可以抓住services.cut和services.hair_straightening。

为了清晰起见,下面的完整代码:

const yourJSON = {
  employers: {
      Mike: {
          old: 20,
          services: {
              cut: {
                  value: 10
              },
              hair_straightening: {
                  value: 20
              }
          }
      },
      Penny: {
          old: 20,
          services: {
              cut: {
                  value: 10
              },
              hair_straightening: {
                  value: 20
              }
          }
      }
   }
}

function getServices(employer) {
  var services = employer.services;
  var servicesKeys = Object.keys(services);
  var serviceValueMatrix = [];
  servicesKeys.forEach(function(service) {
    serviceValueMatrix.push([service, employer.services[service].value])
  })
  return serviceValueMatrix;
}

console.log(getServices(yourJSON.employers.Mike));
// returns [["cut",10], ["hair_straightening",20]]

答案 1 :(得分:1)

你的json应该是这样的:

{{1}}

答案 2 :(得分:0)

您可以使用Object.keys将对象的键作为数组获取,然后您可以很好地遍历它。

// in this case json is a variable representing your parsed data
Object.keys(json).map(function(key) {
  console.log(json[key])
  return json[key].services
})

这将为您提供一系列服务对象。