JSON perspective

JSON perspective

本文关键字:perspective JSON      更新时间:2023-09-26

假设我有一个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对象的顶层是包含上述句子的字符串。

这可能吗?

这在

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对象,这有时会令人沮丧,并且通常是不好的做法。

正如其他人所说,这在任何对象上下文中都是不可能的,因此您需要将所有内容作为对象上/中的可访问部分进行处理。

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