json 像下面这样搜索数组,但它返回null [关闭]

fsi0uk1n  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(51)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

21天前关闭
Improve this question
我有一些数据是数组的数组,每个子数组的长度为1,该数组中唯一的项目是一个具有键值对的对象。举个例子:

const array = [[{'city': 'new york', 'state': 'ny'}], [{'city': 'dallas', 'state': 'tx'}], ,[{'city': 'los angeles', 'state': 'ca'}]]

字符串
我尝试遍历这个数组,只提取城市。

array.forEach(item => console.log(item[0].city))


然而,当我在我的实际数据(不幸的是,我不能分享)上尝试时,我得到了错误

TypeError: Cannot read properties of undefined (reading 'city')


当我试着逃跑时

array.forEach(item => console.log(item[0]))


唯一返回的是一堆[,加上一个未定义的空白条目。
如果它是相关的,我试图索引的实际数据是从Google Sheet中提取的列。
有谁知道为什么我无法正确地浏览我的数据以及围绕它的任何可能的解决方案吗?
正如Parvez指出的,我的数组是作为字符串数组而不是数组数组从数据中提取的。

const array = ["[{'city': 'new york', 'state': 'ny'}]", "[{'city': 'dallas', 'state': 'tx'}]", "","[{'city': 'los angeles', 'state': 'ca'}]"]


如果任何人对如何使用这些子阵列有任何建议,以便我可以提取相关数据,我将不胜感激。

x6492ojm

x6492ojm1#

请像这样试试。

const array = [[{'city': 'new york', 'state': 'ny'}], [{'city': 'dallas', 'state': 'tx'}], ,[{'city': 'los angeles', 'state': 'ca'}]]

array.map((element)=> {
  const [{city, state}] = element;
  console.log(city)
})

字符串

34gzjxbg

34gzjxbg2#

标记为accepted的答案(在撰写本段时)并没有解决问题中提供的输入的问题。该答案已经删除了双引号,因此不再需要解析字符串。
如果我们不加修改地获取您的原始输入,我们会看到您的数据中需要解析的字符串。这些字符串具有JavaScript表示法,而不是JSON,这很遗憾。如果您控制数据的源,那么确保它具有JSON兼容的字符串将是一个好主意。
如果没有,那么eval可能会有所帮助,但它的主要缺点是它会带来代码注入的风险。
折中的办法是使用一个也接受单引号分隔符的解析器,有一个流行的库JSON5正好可以做到这一点。
这里是一个示例的演示。注意,空字符串将不会被视为有效输入(因为它不是JSON),所以你需要自己处理这些。这里我将这些转换为null

<script type="module">

import JSON5 from 'https://unpkg.com/json5@2/dist/index.min.mjs'

const array = ["[{'city': 'new york', 'state': 'ny'}]", "[{'city': 'dallas', 'state': 'tx'}]", "","[{'city': 'los angeles', 'state': 'ca'}]"];
const result = array.map(s => s ? JSON5.parse(s) : null);
console.log(result);

</script>

字符串

6ioyuze2

6ioyuze23#

给定你的示例数组:

const array = ["[{'city': 'new york', 'state': 'ny'}]", "[{'city': 'dallas', 'state': 'tx'}]", "","[{'city': 'los angeles', 'state': 'ca'}]"]

字符串
你可以把整个东西作为一个字符串处理.

function getCities(array) {
    const cities = array.toString();
    const findCities = cities.match(/(?<='city': ')(.*?)(?=',)/g);
    return findCities;
}

相关问题