从Google Sheets提取的字符串数组无法解析取值问题求助
解决方案
可以通过以下步骤处理该字符串数组,提取目标城市数据:
1. 过滤空字符串
先排除数组中的空项,避免后续解析流程出错:
const rawArray = ["[{'city': 'new york', 'state': 'ny'}]", "[{'city': 'dallas', 'state': 'tx'}]", "","[{'city': 'los angeles', 'state': 'ca'}]"]; const filteredArray = rawArray.filter(item => item.trim() !== '');
2. 解析字符串为JS对象
原始字符串使用单引号,不符合JSON规范,需先处理格式再解析;或在数据安全的前提下直接执行字符串代码:
方法一:替换单引号后用JSON.parse(更安全)
const parsedData = filteredArray.map(str => { // 将单引号替换为双引号,转为合法JSON格式 const validJsonStr = str.replace(/'/g, '"'); // 解析为数组后取第一个元素(即目标键值对对象) return JSON.parse(validJsonStr)[0]; });
方法二:使用eval(简单但需注意安全)
仅在数据来源完全可信时使用,避免执行恶意代码风险:
const parsedData = filteredArray.map(str => { // 直接执行字符串代码得到数组,取第一个元素 return eval(str)[0]; });
3. 提取城市名
遍历解析后的对象数组,提取city属性:
const cityNames = parsedData.map(item => item.city); console.log(cityNames); // 输出: ['new york', 'dallas', 'los angeles']
完整整合代码
const rawArray = ["[{'city': 'new york', 'state': 'ny'}]", "[{'city': 'dallas', 'state': 'tx'}]", "","[{'city': 'los angeles', 'state': 'ca'}]"]; const cityNames = rawArray .filter(item => item.trim() !== '') .map(str => JSON.parse(str.replace(/'/g, '"'))[0]) .map(item => item.city); console.log(cityNames);
注意事项
- 若Google Sheets导出的字符串包含特殊字符,需额外添加转义处理逻辑。
- 优先选择
JSON.parse方案,降低安全风险。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

