如何将JavaScript嵌套数组转换为VB.NET嵌套数组?
解析JS格式数据到VB.NET的问题解决
原始JS数据
let sched = [ ["Sunday", 9.30, 12.00, 15.30, 22.00], ["Monday", 8.30, 12.00, 15.30, 19.00], ["Tuesday", 8.30, 12.00, 15.30, 19.00], ["Wednesday", 8.30, 12.00, 15.30, 19.00], ["Thursday", 8.30, 12.00, 15.30, 19.00], ["Friday",], ["Saturday", 8.00, 13.00]];
现有处理代码
Dim splitLines = _hours.Replace("""", "").Replace(" ", "").Replace(vbCrLf, "").TrimStart("[").TrimEnd("]").Split("]") Dim result = splitLines.Select(Function(x) x.Trim.Replace("""", "").Replace("[", "").Split(","c)).ToArray()
问题1:每个工作日索引0出现空值的解决
问题根源是Split("]")会生成空元素,比如处理后的字符串末尾残留空内容,导致split出无效空项。只需在处理前过滤掉空或纯空白的行,同时去掉单条数据split后产生的空元素:
Dim splitLines = _hours.Replace("""", "").Replace(" ", "").Replace(vbCrLf, "").TrimStart("[").TrimEnd("]").Split("]") ' 过滤空行 Dim validLines = splitLines.Where(Function(x) Not String.IsNullOrEmpty(x.Trim)) ' 分割后再过滤空元素 Dim result = validLines.Select(Function(x) x.Trim.Replace("[", "").Split(","c).Where(Function(item) Not String.IsNullOrEmpty(item)).ToArray() ).ToArray()
问题2:解析为简单类的简便方法
先定义对应的数据类,让数据结构更清晰:
Public Class ScheduleDay Public Property DayName As String Public Property Hours As List(Of Double) End Class
然后修改处理逻辑,直接将数据映射为类实例:
Dim splitLines = _hours.Replace("""", "").Replace(" ", "").Replace(vbCrLf, "").TrimStart("[").TrimEnd("]").Split("]") Dim scheduleList = splitLines.Where(Function(x) Not String.IsNullOrEmpty(x.Trim)).Select(Function(line) Dim parts = line.Trim.Replace("[", "").Split(","c).Where(Function(item) Not String.IsNullOrEmpty(item)).ToArray() If parts.Length = 0 Then Return Nothing Dim day = New ScheduleDay() With { .DayName = parts(0), .Hours = New List(Of Double)() } ' 从第二个元素开始转换为数值类型 For i = 1 To parts.Length - 1 If Double.TryParse(parts(i), Dim hour) Then day.Hours.Add(hour) End If Next Return day End Function).Where(Function(d) d IsNot Nothing).ToList()
这样得到的对象列表比二维数组更易维护和调用。
内容的提问来源于stack exchange,提问作者DDulla
相关产品推荐
相关产品推荐

