如何在node.js中将类似数组的字符串转换成数组?

3

实际上,我正在从Android设备中以字符串形式获取arraylist,但是我想将其转换为array。 我查阅了很多类似的问题,但没有一个有用的。 我也尝试使用JSON.parse(),但没有帮助。

我以'[艺术,摄影,写作]'的形式获得societyList。那么如何将这种格式转换为数组?

代码:

var soc_arr=JSON.parse(data.societyList)
            console.log(soc_arr.length)

定义societyList如下:'["艺术", "摄影", "写作"]',然后JSON.parse()应该可以正常工作。 - Satpal
@Satpal 先生,这就是问题所在,如何动态地做到这一点。 - anonymous
4个回答

4

使用类似这样的东西

var array = arrayList.replace(/^\[|\]$/g, "").split(", ");

更新:

在 @drinchev 的建议下,使用了正则表达式。

正则表达式匹配以 '[' 开始、以 ']' 结束的字符。


2
甚至更好的方法是 list.replace(/^\[|\]$/, "").split( ", " ); :) - drinchev
1
@drinchev 哎呀,那不正确,你能验证一下你的正则表达式吗?我得到了一个括号在最后一个字符串上,像 ["Art", "Photography", "Writing]"]。 - Panos K
抱歉,list.replace(/^\[|\]$/g, "").split( ", " ) - drinchev
这将会在 ["Hello, World", "Hi"] 中出现错误。 - Fredrik E
var array = arrayList.replace(/^\["|"\]$/g, "").split('", "'); 应该可以解决这个问题(对于有效的JSON),但正如有人指出的那样,示例字符串并不是有效的JSON。 - Fredrik E

3

这个字符串不是有效的JSON,因为它没有使用""表示一个字符串。

最好的方法是使用类似下面的方法自己解析:

let data = '[test1, test2, test3]';
let parts = data
  .trim() // trim the initial data!
  .substr(1,data.length-2) // remove the brackets from string
  .split(',') // plit the string using the seperator ','
  .map(e=>e.trim()) // trim the results to remove spaces at start and end
  
console.log(parts);


2

RegExp.match() 可能会有用。

 console.log('[Art, Photography, Writing]'.match(/\w+/g))

match()适用于任何字符串,并将其拆分为数组元素。


1
除非在这种情况下,您假设每个数组元素都是完全由ASCII字母组成的单个单词。这可能有些牵强。 - Touffy
@Touffy,问题中没有太多信息可供参考。 - Neil Lunn
我同意。这就是为什么你不应该做出假设的原因。 - Touffy

1
使用 replacesplit。此外,使用 trim() 从数组元素中删除尾随和前导空格。

var str = '[Art, Photography, Writing]';
var JSONData = str.replace('[','').replace(']','').split(',').map(x => x.trim());
console.log(JSONData);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接