双引号的JSON Escape字符在字符串中打印

时间:2018-06-14 08:19:23

标签: json vb6

我使用VB6生成一个JSON文件,其中一个字符串之间有双引号。我使用了双引号转义字符,但现在转义字符也在字符串中打印,即使JSON格式化时我将文件放入JSON成功。

字符串是:

"productName":"16X12 / 46/4X46 63" DRILL"

当我使用转义字符并将其检查为JSON格式化程序时,此字符串中包含双引号,JSON成功但产品名称字符串变为

"productName":"16X12 / 46/4X46 63\"DRILL"

因为你可以看到转义字符在双引号之前的字符串中打印,如何在不打印转义字符的情况下转义双引号。

我尝试使用\和\\但每次\得到打印。

1 个答案:

答案 0 :(得分:2)

您需要一个正确的JSON字符串转义实现,例如试试这个

Private Function JsonEscape(sText As String) As String
    Const STR_CODES     As String = "\u0000|\u0001|\u0002|\u0003|\u0004|\u0005|\u0006|\u0007|\b|\t|\n|\u000B|\f|\r|\u000E|\u000F|\u0010|\u0011|\u0012|\u0013|\u0014|\u0015|\u0016|\u0017|\u0018|\u0019|\u001A|\u001B|\u001C|\u001D|\u001E|\u001F"
    Static vTranscode   As Variant
    Dim lIdx            As Long
    Dim lAsc            As Long

    If IsEmpty(vTranscode) Then
        vTranscode = Split(STR_CODES, "|")
    End If
    For lIdx = 1 To Len(sText)
        lAsc = AscW(Mid$(sText, lIdx, 1))
        If lAsc = 92 Or lAsc = 34 Then '--- \ and "
            JsonEscape = JsonEscape & "\" & ChrW$(lAsc)
        ElseIf lAsc >= 32 And lAsc < 256 Then
            JsonEscape = JsonEscape & ChrW$(lAsc)
        ElseIf lAsc >= 0 And lAsc < 32 Then
            JsonEscape = JsonEscape & vTranscode(lAsc)
        ElseIf Asc(Mid$(sText, lIdx, 1)) <> 63 Or Mid$(sText, lIdx, 1) = "?" Then '--- ?
            JsonEscape = JsonEscape & ChrW$(AscW(Mid$(sText, lIdx, 1)))
        Else
            JsonEscape = JsonEscape & "\u" & Right$("0000" & Hex$(lAsc), 4)
        End If
    Next
End Function

这会处理字符串中的"\以及vbCrLf和其他特殊符号(charcode&lt; 32)。这也处理unicode字符(charcode&gt; 256)。

顺便说一句,您必须转义所有用户提供的字符串(以键或值),以防止在所有情况下生成无效的JSON。