首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JSON中查找对象键索引

如何在JSON中查找对象键索引
EN

Stack Overflow用户
提问于 2019-09-18 06:58:15
回答 3查看 77关注 0票数 0

我试图获取所选值的索引,以显示所有更深层次的选项。

我的JSON看起来是这样的:

代码语言:javascript
运行
复制
{
  "flow": {
    "startmessage": "Hallo [name]",
    "questionmessage": "Waar heb je een vraag over?",
    "categories": [
      {
        "Openingstijden": [
          {"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
          "Hoe upload ik een audio file?",
          "Hoe stel ik een doorschakeling in?",
          "Hoe stel ik een pauze in?"
        ]
      },
      {
        "Mijn bedrijfsgegevens": [
          "Hoe wijzig ik mijn bedrijfsgegevens?",
          "Hoe maak ik een nieuwe gebruiker aan?",
          "Mijn bedrijfsgegevens kloppen niet"
        ]
      },
      {
        "Mijn facturen": [
          "Hoe kan ik mijn facturen inzien?",
          "Ik heb geen factuur ontvangen",
          "Het bedrag op mijn factuur klopt niet!"
        ]
      },
      {
        "Mijn project": [
          "Hoe kan ik mijn projectstatus inzien?",
          "Waar kan ik mijn project terugvinden?",
          "Waarom moet ik een inventarisatiefomulier invullen?"
        ]
      },
      {
        "Mijn contract": [
          "Waar kan ik mijn contract terugvinden?",
          "De gegevens van mijn contract kloppen niet"
        ]
      },
      {
        "CDR's": [
          "Hoe exporteer ik mijn CDR's?",
          "Waarom werken mijn CDR's niet?",
          "Hoe filter ik mijn CDR's?"
        ]
      }
    ]
  }
}

我试着这么做是为了得到“Openingstijden”的索引。

flow是我给出的JSON对象的名称。

代码语言:javascript
运行
复制
var index = flow['flow']['categories'].findIndex(function(category) {
   return category == "Openingstijden";
});

我也试过这个:

代码语言:javascript
运行
复制
var index = Object.keys(flow['flow']['categories']).indexOf("Openingstijden");

然而,它总是返回-1,所以它说它找不到它。

有没有人知道如何找到索引,或者如何使我的JSON结构更好?

也许我用的结构太复杂了?!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-18 07:00:58

每个数组项都是一个具有要搜索的键的对象。使用当前结构,首先将每个数组项映射到其键:

代码语言:javascript
运行
复制
const flow={flow:{startmessage:"Hallo [name]",questionmessage:"Waar heb je een vraag over?",categories:[{Openingstijden:[{"Hoe pas ik mijn openingstijden aan?":["text 2"]},"Hoe upload ik een audio file?","Hoe stel ik een doorschakeling in?","Hoe stel ik een pauze in?"]},{"Mijn bedrijfsgegevens":["Hoe wijzig ik mijn bedrijfsgegevens?","Hoe maak ik een nieuwe gebruiker aan?","Mijn bedrijfsgegevens kloppen niet"]},{"Mijn facturen":["Hoe kan ik mijn facturen inzien?","Ik heb geen factuur ontvangen","Het bedrag op mijn factuur klopt niet!"]},{"Mijn project":["Hoe kan ik mijn projectstatus inzien?","Waar kan ik mijn project terugvinden?","Waarom moet ik een inventarisatiefomulier invullen?"]},{"Mijn contract":["Waar kan ik mijn contract terugvinden?","De gegevens van mijn contract kloppen niet"]},{"CDR's":["Hoe exporteer ik mijn CDR's?","Waarom werken mijn CDR's niet?","Hoe filter ik mijn CDR's?"]}]}};


const keys = flow['flow']['categories'].map(arr => Object.keys(arr)[0]);
const index = keys.indexOf("Openingstijden");

console.log(index);

但是,如果对象只有一个属性,您可能会考虑让categories是一个对象数组,其中一个键是唯一的字符串(例如,Openingstijden),另一个键是数组,例如:

代码语言:javascript
运行
复制
  {
    label: "Openingstijden",
    arr: [
      {"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
      "Hoe upload ik een audio file?",
      "Hoe stel ik een doorschakeling in?",
      "Hoe stel ik een pauze in?"
    ]
  }

然后可以查找label属性。

如果您经常希望通过标签查找对象,那么就使用一个对象,其中每个键都是标签,例如:

代码语言:javascript
运行
复制
const flow = {
  "flow": {
    "startmessage": "Hallo [name]",
    "questionmessage": "Waar heb je een vraag over?",
    "categories": {
      "Openingstijden": [
        {"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
        "Hoe upload ik een audio file?",
        "Hoe stel ik een doorschakeling in?",
        "Hoe stel ik een pauze in?"
      ]
    },
    "Mijn bedrijfsgegevens": [
      "Hoe wijzig ik mijn bedrijfsgegevens?",
      "Hoe maak ik een nieuwe gebruiker aan?",
      "Mijn bedrijfsgegevens kloppen niet"
    ],
    ...
票数 2
EN

Stack Overflow用户

发布于 2019-09-18 07:03:43

正如所评论的,这应该就足够了。

flow‘flow’..findindex((类别) => 'Openingstijden‘in obj)

您的方法的问题是,您试图获取数组的键,而不是对象。

样本:

代码语言:javascript
运行
复制
var flow = {
  "flow": {
    "startmessage": "Hallo [name]",
    "questionmessage": "Waar heb je een vraag over?",
    "categories": [{
        "Openingstijden": [{
            "Hoe pas ik mijn openingstijden aan?": ["text 2"]
          },
          "Hoe upload ik een audio file?",
          "Hoe stel ik een doorschakeling in?",
          "Hoe stel ik een pauze in?"
        ]
      },
      {
        "Mijn bedrijfsgegevens": [
          "Hoe wijzig ik mijn bedrijfsgegevens?",
          "Hoe maak ik een nieuwe gebruiker aan?",
          "Mijn bedrijfsgegevens kloppen niet"
        ]
      },
      {
        "Mijn facturen": [
          "Hoe kan ik mijn facturen inzien?",
          "Ik heb geen factuur ontvangen",
          "Het bedrag op mijn factuur klopt niet!"
        ]
      },
      {
        "Mijn project": [
          "Hoe kan ik mijn projectstatus inzien?",
          "Waar kan ik mijn project terugvinden?",
          "Waarom moet ik een inventarisatiefomulier invullen?"
        ]
      },
      {
        "Mijn contract": [
          "Waar kan ik mijn contract terugvinden?",
          "De gegevens van mijn contract kloppen niet"
        ]
      },
      {
        "CDR's": [
          "Hoe exporteer ik mijn CDR's?",
          "Waarom werken mijn CDR's niet?",
          "Hoe filter ik mijn CDR's?"
        ]
      }
    ]
  }
}

var index = flow['flow']['categories'].findIndex((category) => 'Openingstijden' in category);

console.log(index)

票数 1
EN

Stack Overflow用户

发布于 2019-09-18 07:14:22

假设将包含flow对象的对象赋值给一个data变量:

代码语言:javascript
运行
复制
let data = {
  "flow": {
    "startmessage": "Hallo [name]",
    "questionmessage": "Waar heb je een vraag over?",
    "categories": [
      {
        "Openingstijden": [
          {"Hoe pas ik mijn openingstijden aan?": ["text 2"]},
          "Hoe upload ik een audio file?",
          "Hoe stel ik een doorschakeling in?",
         "Hoe stel ik een pauze in?"
        ]
      },
  {
    "Mijn bedrijfsgegevens": [
      "Hoe wijzig ik mijn bedrijfsgegevens?",
      "Hoe maak ik een nieuwe gebruiker aan?",
      "Mijn bedrijfsgegevens kloppen niet"
    ]
  },
  {
    "Mijn facturen": [
      "Hoe kan ik mijn facturen inzien?",
      "Ik heb geen factuur ontvangen",
      "Het bedrag op mijn factuur klopt niet!"
    ]
  },
  {
    "Mijn project": [
      "Hoe kan ik mijn projectstatus inzien?",
      "Waar kan ik mijn project terugvinden?",
      "Waarom moet ik een inventarisatiefomulier invullen?"
    ]
  },
  {
    "Mijn contract": [
      "Waar kan ik mijn contract terugvinden?",
      "De gegevens van mijn contract kloppen niet"
    ]
  },
  {
    "CDR's": [
      "Hoe exporteer ik mijn CDR's?",
      "Waarom werken mijn CDR's niet?",
      "Hoe filter ik mijn CDR's?"
    ]
  }
]
  }
}

for (let i of data.flow.categories) {
  for (let j in i) {
    if (j === "Openingstijden") {
      console.log("index is: " + j);
    }
  }
}

我应该注意,如果对象包含函数等,使用in来迭代对象是有点棘手的。在这种情况下,没有理由不使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57986760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档