首页 > 解决方案 > 如何在 VB.net 中转换 JSON 以便在 PHP 中使用

问题描述

我收到了一个将 JSON 字符串提交给 API 的 php 文件。但是,我正在使用的执行相同操作的应用程序在 VB.net 上运行。

我使用了一个 Dictionary 对象来重建 JSON 对象,但我在最终输出中发现了一些细微的差异。这是我的代码:

        Dim data As New Dictionary(Of String, Object)

        Dim AuthDetails As New Dictionary(Of String, Object)
        AuthDetails.Add("UserID", 18)
        AuthDetails.Add("Token", "One")
        AuthDetails.Add("Timestamp", Date.Now().ToString("yyyyMMddhhmmss")

        data.Add("AuthDetails", AuthDetails)

        Dim JSONByte As Byte() = Encoding.Default.GetBytes(JsonConvert.SerializeObject(data, Formatting.Indented))
        Dim JSONString As String = Encoding.ASCII.GetString(JSONByte).Replace(vbCrLf, "").Replace("""", """""")

我面临两个问题:

  1. 我在 JSONString 上添加了 2 个替换方法,因为在 VB.net 中,JSONString 会有换行符(格式很好)和一个“小于”,显然,PHP 给出了类似的结构。我认为我上面的代码是一个修复而不是约定。但到目前为止它工作正常,除非我弄清楚如何避免该修复!

  2. 主要问题是这是预期的 PHP JSON 字符串,它与我能够在 VB.net 中获得的内容有细微差别,如下所示:

PHP:

{""AuthDetails"":[{""UserID"":""18"",""Token"":""One"",""Timestamp"":""20190424132431""}]}

VB.net:

{ ""AuthDetails"": { ""UserID"": ""18"", ""Token"": ""One"", ""Timestamp"": ""20190424053345"" }}

因此,如果您仔细看,上面的 PHP 部分有一些方括号,而我在 VB.net 部分中缺少这些方括号。我知道这是定义数组的 PHP 方式,但我不知道如何在 VB.net 中使用我使用过的 Dictionary 对象来完成它。

请帮我找出我的 JSON 字符串的附加方括号。

修订

我能够做到这一点:

{ ""AuthDetails"": [ { ""Key"": ""UserID"", ""Value"": ""1581"" }, { ""Key"": ""Token"", ""Value "": ""4f7bbcf97b4313f8353fa06c5e3a8fb6"" }, { ""Key"": ""Timestamp"", ""Value"": ""20190425052154"" } ]}

当我像这样将 Dictionary 对象转换为 Array 时:

        data.Add("AuthDetails", AuthDetails.toArray())

但是现在将键名和值名引入字符串......,我不需要!

谢谢!

标签: phparraysjsonvb.netdictionary

解决方案


谢谢你的意见!它加起来就是我现在想出的解决方案,如下所示:

        Dim auth(0) As Object
        auth(0) = AuthDetails
        data.Add("AuthDetails", auth)

因此,我没有将 AuthDetails 添加到数据对象,而是先将其添加到定义的数组中(Tim Morton!)。

修订:(吉米)我将格式更改为Formatting.None,它删除了换行符,还删除了添加额外双引号的需要!

[删除了之前关于 PHP 的评论]


推荐阅读