You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用WordNik API构建密码生成字典的数组数据处理问题

处理WordNik API数据生成密码字典的解决方案

我来帮你搞定WordNik API的数据处理,把它转化成能用来生成密码字典的分类单词~先假设你现在拿到的WordNik返回数据是类似这样的JSON结构(这是WordNik随机单词接口的典型输出):

[
  {"word": "quickly", "partOfSpeech": "adverb"},
  {"word": "mountain", "partOfSpeech": "noun"},
  {"word": "bright", "partOfSpeech": "adjective"},
  {"word": "run", "partOfSpeech": "verb"},
  {"word": "silently", "partOfSpeech": "adverb"}
]

再假设你的代码大概是这样的(请求到了数据但不知道怎么处理):

async function fetchWords() {
  const apiUrl = 'https://api.wordnik.com/v4/words.json/randomWords?limit=10&api_key=你的API密钥';
  const response = await fetch(apiUrl);
  const rawWords = await response.json();
  // 卡在这里不知道怎么按词性提取单词...
  console.log(rawWords);
}

那我们一步步来处理:

第一步:按词性分类提取单词

我们可以创建一个对象,把不同词性的单词分别放到对应的数组里,这样后续组合密码就方便多了:

async function getCategorizedWords() {
  const apiUrl = 'https://api.wordnik.com/v4/words.json/randomWords?limit=10&api_key=你的API密钥';
  const response = await fetch(apiUrl);
  const rawWords = await response.json();

  // 初始化存储不同词性单词的对象
  const wordCategories = {
    adverbs: [],
    nouns: [],
    adjectives: [],
    verbs: []
  };

  // 遍历返回的原始单词数据
  rawWords.forEach(wordItem => {
    const { word, partOfSpeech } = wordItem;
    // 根据词性把单词放到对应数组
    switch(partOfSpeech) {
      case 'adverb':
        wordCategories.adverbs.push(word);
        break;
      case 'noun':
        wordCategories.nouns.push(word);
        break;
      case 'adjective':
        wordCategories.adjectives.push(word);
        break;
      case 'verb':
        wordCategories.verbs.push(word);
        break;
      // 遇到不关心的词性就跳过
      default:
        break;
    }
  });

  return wordCategories;
}

第二步:用分类单词生成密码字典

拿到分类好的单词后,就可以自由组合不同词性的单词来生成密码了,比如形容词+名词+副词的组合,还可以加数字或符号提升密码强度:

async function buildPasswordDictionary() {
  const { nouns, adverbs, adjectives } = await getCategorizedWords();
  const passwordDict = [];

  // 示例:形容词 + 名词 + 副词 的组合
  adjectives.forEach(adj => {
    nouns.forEach(noun => {
      adverbs.forEach(adv => {
        // 纯单词组合
        passwordDict.push(`${adj}${noun}${adv}`);
        // 加数字和符号增强强度
        passwordDict.push(`${adj}${noun}${adv}12!`);
      });
    });
  });

  // 你也可以添加其他组合方式,比如名词+动词+数字
  nouns.forEach(noun => {
    verbs.forEach(verb => {
      passwordDict.push(`${noun}${verb}${Math.floor(Math.random()*100)}`);
    });
  });

  return passwordDict;
}

// 调用生成字典
buildPasswordDictionary().then(dict => {
  console.log('生成的密码字典:', dict);
});

实用小技巧

  • 记得把代码里的你的API密钥替换成你在WordNik申请到的真实密钥
  • 如果WordNik返回的词性缩写不一样(比如有时候用adv代替adverb),可以调整switch里的判断条件,或者用字符串匹配来兼容
  • 你还可以直接在API请求里指定要获取的词性,减少后续处理的工作量,比如:
    https://api.wordnik.com/v4/words.json/randomWords?limit=10&includePartOfSpeech=noun,adverb&api_key=你的API密钥
    

内容的提问来源于stack exchange,提问作者Jude Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:09:56