如何在JS中将JSON文件中的对象转换为数组(无需jQuery)
解决JSON字符串转JS数组的问题
首先得说,你的JSON文件里藏了个小坑——groups的值其实是一个字符串形式的非标准JSON,而且这个字符串里的对象键(id、title)没有用双引号包裹,这不符合严格的JSON规范,所以直接解析肯定会出问题。下面给你一步步的解决方案:
步骤1:读取JSON文件
你已经做对这一步了,用require加载没问题:
const json = require('./test.json');
步骤2:修复非标准JSON字符串
因为原字符串里的键没有双引号,我们需要先用正则把它们补上,转换成合法的JSON格式:
// 把没有引号的键替换成带双引号的键 const validJsonStr = json.groups.replace(/(\w+):/g, '"$1":');
这个正则会匹配所有单词字符+冒号的组合,替换成"单词字符":,这样就符合JSON要求了。
步骤3:解析成JS数组
现在用JSON.parse就能把合法的JSON字符串转成你想要的数组了:
const groups = JSON.parse(validJsonStr); console.log(groups); // 输出:[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]
完整代码示例
把上面的步骤合起来就是:
const json = require('./test.json'); const validJsonStr = json.groups.replace(/(\w+):/g, '"$1":'); const groups = JSON.parse(validJsonStr); // 现在你可以正常使用groups数组了 groups.forEach(group => { console.log(`Group ID: ${group.id}, Title: ${group.title}`); });
额外提醒
如果以后能控制JSON文件的生成,尽量直接生成标准的JSON格式,比如把groups写成真正的数组而不是字符串:
{ "groups": [ { "id": 1, "title": "group 1" }, { "id": 2, "title": "group 2" } ] }
这样你直接const groups = json.groups;就能用,不用额外处理啦。
内容的提问来源于stack exchange,提问作者valentin marchand
相关产品推荐
相关产品推荐

