我正在构建一项功能,该功能可以允许用户键入单词,选择单词所在的语言,然后使用此API service获取单词的定义和示例。
我要获取的数据是“含义”的“感叹号”位置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!"
}
]
}
}]
下面是法语单词的JSON数据格式。
[
{
"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);
我想知道当所需数据的位置随每个请求而变化时,是否还有其他方法可以动态获取数据。
答案 0 :(得分:0)
由于响应对象的结构可以更改,因此可以使用“深度选择”功能。请参见此注释以获取一种干净的函数,例如,该函数可以让您选择属性“ definition”。
https://stackoverflow.com/a/15643382/3347968
例如
const res = findNested(myResponseObj, 'definition');
会导致类似
res = ["Souhait de bonne journée (adressé en arrivan.."].
答案 1 :(得分:0)
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])
}
}