我使用VB6生成一个JSON文件,其中一个字符串之间有双引号。我使用了双引号转义字符,但现在转义字符也在字符串中打印,即使JSON格式化时我将文件放入JSON成功。
字符串是:
"productName":"16X12 / 46/4X46 63" DRILL"
当我使用转义字符并将其检查为JSON格式化程序时,此字符串中包含双引号,JSON成功但产品名称字符串变为
"productName":"16X12 / 46/4X46 63\"DRILL"
因为你可以看到转义字符在双引号之前的字符串中打印,如何在不打印转义字符的情况下转义双引号。
我尝试使用\和\\但每次\得到打印。
答案 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。