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

如何用变量在JSON文件中查找对象?Node.js/JavaScript技术疑问

解决方法:调整JSON结构+使用方括号访问动态键

首先,你的JSON结构可以优化得更实用——当前table是一个数组,里面嵌套着以用户ID为键的对象,这种结构会让查找用户时区变得繁琐。更合理的做法是把table改成对象,直接用用户ID作为键,对应的值是包含时区的对象,这样可以直接通过ID快速定位,不用遍历数组。

第一步:修正JSON结构

把你的timezones.json改成这样(补全未闭合的括号,调整结构):

{
  "table": {
    "221757857836564485": {
      "timezone": "timezone1"
    },
    "12345": {
      "timezone": "Asia/Shanghai"
    }
  }
}

第二步:调整Node.js代码

你的原代码有几个小问题:

  • 缺少fs模块的引入
  • user变量的定义逻辑有问题(不能用未定义的user.whatever.id)
  • 访问动态键时不能用点语法(点语法适用于固定键名,变量作为键名要用方括号)

修改后的代码如下:

// 先引入fs模块
const fs = require('fs');

// 读取并解析JSON文件
const content = fs.readFileSync("timezones.json");
const body = JSON.parse(content);

// 假设这里是你获取到的用户ID(替换成实际的获取逻辑,比如从请求参数、数据库等)
const user = "12345"; 

// 用方括号语法访问动态键,同时增加容错判断
if (body.table[user]) {
  console.log(`${user}'s timezone: ${body.table[user].timezone}`);
} else {
  console.log(`No timezone data found for user ID: ${user}`);
}

为什么这样可行?

当user是一个存储用户ID的变量时,body.table[user]会自动把变量的值作为键去查找对象中的对应属性,这是JavaScript中访问对象动态键的标准方式。而调整后的JSON结构让这种查找直接高效,不需要遍历数组。

如果暂时不想修改JSON结构(不推荐)

如果因为某些原因不能改JSON,你需要遍历table数组找到包含目标用户ID的对象,代码会繁琐一些:

const fs = require('fs');
const content = fs.readFileSync("timezones.json");
const body = JSON.parse(content);
const user = "221757857836564485";

// 遍历数组查找用户
const userEntry = body.table.find(item => item[user]);
if (userEntry) {
  console.log(`${user}'s timezone: ${userEntry[user][0].timezone}`);
} else {
  console.log(`User not found`);
}

这种方式效率更低,尤其是当用户数量多的时候,所以还是优先推荐调整JSON结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:26:05