登录

将范围转换为json数组

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 修改于2022-01-02
  • 该问题已被编辑
  • 提问者: Stack Overflow用户
  • 提问时间: 2022-01-02 02:40

在excel VBA中,如何编写自定义函数将范围转换为json数组?

我现在只有函数签名:

Function to_json(input As Range)
End Function

我需要将输入转换为json数组,如下所示

[
  [4,"foo"],
  ["bar",5]
]

我该怎么做?

它的最终目标是将json发布到web服务,以类似的格式获得响应,并将其作为range对象返回。

编辑:输入范围可以包括数字和字符串的任意组合。我需要将它们复制到一个2维的json数组中,如示例所示。注意,我需要json数组,而不是json对象。

我搜索了一段时间,但找不到任何明显的答案。

edit2:在js中,答案非常简单:JSON.stringify(输入),是否有一个简单的vba等效?

浏览 11 关注 0 得票数 -1
  • 得票数为Stack Overflow原文数据
原文
回答于2022-01-02
得票数 1

对于全面的解决方案,请使用JsonConverter,但对于简单的特定情况,请尝试

Function to_json(rng As Range)
    Dim ar, v, i As Long, j As Long, qq As String
    Dim js As String, r As String
    qq = Chr(34)
    ar = rng.Value
    For i = 1 To UBound(ar)
        r = "["
        For j = 1 To UBound(ar, 2)
            v = ar(i, j)
            'Debug.Print i, j, v, VarType(v)
            Select Case VarType(v)
                Case vbError
                    v = ""
                Case vbNull, vbEmpty
                    v = "null"
                Case vbDate
                    v = qq & Format(v, "yyyy-mm-dd") & qq
                Case vbString
                    v = qq & Replace(v, qq, "\" & qq) & qq
                Case Else
            End Select
            If Len(r) > 1 Then r = r & ","
            r = r & v
        r = r & "]"
        If Len(js) > 0 Then js = js & ","