【问题标题】:Serializing from object to JSON从对象序列化到 JSON
【发布时间】:2017-08-07 17:53:55
【问题描述】:

我在一些用 VB6 编写的遗留应用程序中使用 Web 服务。现在,我已经能够使用此处找到的 VB JSON 解析器解析从 Web 服务返回的 JSON:http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html

但是,我仍在对传递到 POST 请求有效负载的 JSON 字符串进行硬编码。

一般来说:

result = WebRequestPost(url, "{""Id"":""" & productId & """,""Name"":""" & productName & """,""Category"":""" & productCat & """,""Price"":""" & productPrice & """}")

有没有更简洁的方法可以基于对象生成 JSON 有效负载?

【问题讨论】:

  • 源代码中有许多 VB6 类可以很好地处理双向的 JSON 序列化。即使是你链接的那个也应该可以,但从它的变化历史来看,它让我脖子后面的头发竖起来了。它可能是垃圾,因为它依赖于始终在美国英语区域设置或至少接近它的程序运行的程序 - 不知道它犯了多少其他新手错误。

标签: json vb6


【解决方案1】:

我最终构建了自己的各种汇编程序...

Dim jsonArray() As String
'_______________________________________________________________
'Initializes the opening and closing braces of the JSON payload
Public Sub JSONInitialize()
ReDim jsonArray(1)
jsonArray(0) = "{"
jsonArray(1) = "}"
End Sub
'_______________________________________________________________
'Adds a string value to the JSON payload
Public Sub JSONAddString(nFieldName As String, nValue As String)
Dim temp As String
temp = jsonArray(UBound(jsonArray))

Dim index As Integer
index = UBound(jsonArray)

ReDim Preserve jsonArray(UBound(jsonArray) + 1)
jsonArray(UBound(jsonArray)) = temp
jsonArray(index) = """" & nFieldName & """:""" & nValue & ""","

End Sub
'_______________________________________________________________
'Adds an integer value to the JSON payload
Public Sub JSONAddInt(nFieldName As String, nValue As Integer)
Dim temp As String
temp = jsonArray(UBound(jsonArray))

Dim index As Integer
index = UBound(jsonArray)

ReDim Preserve jsonArray(UBound(jsonArray) + 1)
jsonArray(UBound(jsonArray)) = temp
jsonArray(index) = """" & nFieldName & """:" & nValue & ","

End Sub

所以(经过清理的)执行最终看起来像:

Dim o As New MyObject
Call o.JSONInitialize
Call o.JSONAddString("My JSON String Field", "Test String Value")
Call o.JSONAddInt("My JSON Int Field", 25)

o.JSONSerialize() 返回:

{"My JSON String Field":"Test String Value","My JSON Int Field": 25,}

不幸的是,它把逗号放在最后,所以它不会赢得任何选美比赛,但我调用的 API 并不关心。

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多