JSON透视

时间:2012-08-18 21:31:13

标签: javascript json

假设我有一个JSON文档/ JavaScript对象,如下所示:

var animal = {
  "squirrel": "Squirrels belong to a large family of small or medium-sized rodents called the Sciuridae."
}

在JavaScript中,会发生这种情况:

console.log(animal.squirrel) //Squirrels belong to a large family of small or medium-sized rodents called the Sciuridae

假设我想将rank对象添加到:

var animal = {
  "squirrel": {   
    "rank": {
      "Kingdom": "Animalia",
      "Phylum": "Chordata",
      "Class": "Mammalia",
      "Order": "Rodentia",
      "Suborder": "Sciuromorpha",
      "Family": "Sciuridae"
    }
  }
}

排名可以这样访问:

animal.squirrel.rank

但我仍然希望animal.squirrel对象的顶级是包含上述句子的字符串。

这可能吗?

2 个答案:

答案 0 :(得分:5)

JSON不可能。但是,在JavaScript中,您可以执行一些操作。您可以提供在将对象转换为字符串时使用的toString方法:

var animal = {
  "squirrel": {   
    "rank": {
      "Kingdom": "Animalia",
      "Phylum": "Chordata",
      "Class": "Mammalia",
      "Order": "Rodentia",
      "Suborder": "Sciuromorpha",
      "Family": "Sciuridae"
    },
    toString: function() {
      return "Squirrels belong to a large family of small or medium-sized rodents called the Sciuridae.";
    }
  }
};

您还可以使用String对象:

var animal = {
    squirrel: new String("Squirrels belong to a large family of small or medium-sized rodents called the Sciuridae.")
};

animal.squirrel.rank = {
    "Kingdom": "Animalia",
    "Phylum": "Chordata",
    "Class": "Mammalia",
    "Order": "Rodentia",
    "Suborder": "Sciuromorpha",
    "Family": "Sciuridae"
};

后者的行为更像是一个字符串,但是它使用了一个String对象,这有时令人沮丧,而且通常是不好的做法。

答案 1 :(得分:1)

正如其他人所说,这在任何对象上下文中都是不可能的,因此您需要将对象作为 on / in 对象处理。

var animal = {
  "squirrel": {
    "info": "Squirrels belong to a large family of small or medium-sized rodents called the Sciuridae.",
    "rank": {
      ...
    }
  }
}

而且,我认为无关,你可以设置快速访问器以实现共性。

function getAnimalInfo(animalName) {
  if (!animal[animalName]) return "No info for: " + animalName;

  return animal[animalName].info;
}

所以,

console.log(getAnimalInfo("squirrel")); //Squirrels belong to a large family of small or medium-sized rodents called the Sciuridae