Javascript 如何动态获取JSON文件中嵌套的数据

Javascript 如何动态获取JSON文件中嵌套的数据,javascript,json,Javascript,Json,我正在构建一个功能,允许用户键入一个单词,选择该单词所使用的语言,然后获取单词的定义和使用该功能的示例 我要获取的数据是位于“意义”的“感叹号”位置0处的任何数据。通过这种方式,我可以确保用户获得他们要查找的单词的定义和示例。我的问题是,“定义”和“示例”数据的位置因语言而异。如您所见,下面是英文单词的JSON数据格式 [{ "word": "hello", "phonetic": [ "həˈləʊ", "hɛˈləʊ" ], "

我正在构建一个功能,允许用户键入一个单词,选择该单词所使用的语言,然后获取单词的定义和使用该功能的示例

我要获取的数据是位于“意义”的“感叹号”位置0处的任何数据。通过这种方式,我可以确保用户获得他们要查找的单词的定义和示例。我的问题是,“定义”和“示例”数据的位置因语言而异。如您所见,下面是英文单词的JSON数据格式

[{
    "word": "hello",
    "phonetic": [
        "həˈləʊ",
        "hɛˈləʊ"
    ],
    "meaning": {
        "exclamation": [
            {
                "definition": "used as a greeting or to begin a telephone conversation.",
                "example": "hello there, Katie!"
            }
        ]
    }
}]
[
    {
        "word": "bonjour",
        "phonetic": "",
        "origin": "",
        "meaning": {
            "nom masculin": {
                "definitions": [
                    {
                        "definition": "Souhait de bonne journée (adressé en arrivant, en rencontrant).",
                        "example": "",
                        "synonyms": [
                            "salut"
                        ]
                    }
                ]
            }
        }
    }
]
下面这个是法语单词的JSON数据格式

[{
    "word": "hello",
    "phonetic": [
        "həˈləʊ",
        "hɛˈləʊ"
    ],
    "meaning": {
        "exclamation": [
            {
                "definition": "used as a greeting or to begin a telephone conversation.",
                "example": "hello there, Katie!"
            }
        ]
    }
}]
[
    {
        "word": "bonjour",
        "phonetic": "",
        "origin": "",
        "meaning": {
            "nom masculin": {
                "definitions": [
                    {
                        "definition": "Souhait de bonne journée (adressé en arrivant, en rencontrant).",
                        "example": "",
                        "synonyms": [
                            "salut"
                        ]
                    }
                ]
            }
        }
    }
]
目前,我正在将每个数据的位置存储在一个变量中,并重复执行此操作,直到达到我试图获取的最终数据的位置,如下所示

const firstData = data[0];
const firstDataKeys = Object.keys(firstData);
const meaningsIndex = firstDataKeys.indexOf("meaning");
const meaningsData = firstData[firstDataKeys[meaningsIndex]]
const meaningsKeys = Object.keys(meaningsData);

我想知道,当所需数据的位置随每个请求而变化时,是否还有其他方法可以动态获取数据。

您可以使用类似“深度选择器”的功能,因为响应对象的结构可以更改。请参阅此注释,以获取一个干净的函数,该函数允许您选择属性“定义”,例如

会导致这样的结果吗

res = ["Souhait de bonne journée (adressé en arrivan.."].

Javascript允许您使用JSON.parse直接将Javascript解析为对象

所以你可以做一些类似的事情

const word = "exclamation"
const dict = JSON.parse(json);

//These 2 syntaxes are equivalent
const definition1 = dict["meaning"][word]["definitions"][0];
const definition2 = dict.meaning[word].definitions[0];
如果你不知道这个词是否存在,你可以这样做

const word = "exclamation"
const dict = JSON.parse(json);

//These 2 syntaxes are equivalent
const wordInfo = dict.meaning[word];
if(wordInfo)
{
   //you can do something more exotic, but this will only call code if the
   //word exists. 
   for(var i = 0;i < wordInfo.definitions.length;i++)
   {
     console.log(wordInfo.definitions[0])
   }
}
const word=“感叹号”
const dict=JSON.parse(JSON);
//这两个语法是等价的
const wordInfo=dict.means[单词];
如果(wordInfo)
{
//您可以做一些更奇特的事情,但这只会在
//这个词是存在的。
for(var i=0;i