【问题标题】:Deserialise JSON in VB在VB中反序列化JSON
【发布时间】:2015-07-31 06:27:14
【问题描述】:

我在 VB 中反序列化此 JSON 时遇到问题。我只能获取每个数组中的值,但无法获取表中字段名的键。你会注意到每个对象的大小可以不同,我可以在反序列化时处理..

谁能帮忙?

{
"MATRIX": [
    {
        "1": "FM",
        "2": "4",
        "3": "Floor type",
        "4": "Standing water",
        "5": "Property unsafe"
    },
    {
        "1": "FM",
        "2": "4",
        "3": "Ceiling",
        "4": "Mould spores",
        "5": "Room/property still safe"
    },
    {
        "1": "FL",
        "2": "Basement",
        "3": "1"
    },
    {
        "1": "FL",
        "2": "External",
        "3": "7"
    },
    {
        "1": "FL",
        "2": "First Floor",
        "3": "3"
    },
    {
        "1": "FL",
        "2": "Garden",
        "3": "6"
    },
    {
        "1": "FL",
        "2": "Ground Floor",
        "3": "2"
    },
    {
        "1": "FL",
        "2": "Second Floor",
        "3": "4"
    },
    {
        "1": "FL",
        "2": "test 2",
        "3": "9"
    },
    {
        "1": "FL",
        "2": "Third Floor",
        "3": "5"
    },
    {
        "1": "CA",
        "2": "Bath",
        "3": "Bathroom",
        "4": "Bath"
    },
    {
        "1": "CA",
        "2": "Electrical",
        "3": "Bathroom",
        "4": "Bathroom Socket"
    }
  ]
}

提前谢谢你,

D:)

再次嗨..我已经尝试了第二个建议中的代码,但无法同时获取每个项目的键和值。我得到键,然后是字符串的每次迭代的值..

这就是我正在做的事情。请你指出我的错误..

       Dim json As String = "{""items"":[{""Name"":""John"",""Age"":""20"",""Gender"":""Male""},{""Name2"":""Tom"",""Age2"":""25"",""Gender2"":""Male""},{""Name3"":""Sally"",""Age3"":""30"",""Gender3"":""Female""}]}"

    Dim jss = New JavaScriptSerializer()
    Dim data = jss.Deserialize(Of Object)(json)

    For i = 0 To 2
        For Each key As String In data("items")(i).Keys
            MsgBox(key)
        Next
        'For Each item As Dictionary(Of String, Object) In data("items")
        For Each val As String In data("items")(i).Values
            MsgBox(val)
        Next
    Next

再次感谢您,

德里克。

【问题讨论】:

  • 请包含您正在使用的代码
  • 另外,这是无效或不完整的,并且在构造时您将遇到名为“1”、“2”、“3”的属性...
  • 对不起 Plutonix,我删除了我的代码,因为我设法摆脱了使用这个.. Dim j As Object = New JavaScriptSerializer().Deserialize(Of Object)(FaultJSON) For Each item As Object In j Next.. 但是我现在在这里有多个对象,我将尝试第二个建议。你的数字是对的,我将用我需要的字段名替换它们。谢谢你..
  • 不要反序列化为对象,创建一个类型(类)

标签: json vb.net


【解决方案1】:

如果我对问题的理解正确,您可以使用键来获取相应的值,使用如下方式:

For Each item In data("items")
    Console.WriteLine("***item***")
    For Each key In item.Keys
        Console.WriteLine("{0}:{1}", key, item(key))
    Next
Next

产生以下输出:

***物品*** 姓名:约翰 年龄:20 性别:男 ***物品*** 姓名2:汤姆 年龄2:25 性别2:男 ***物品*** 名称3:莎莉 年龄3:30 性别3:女

【讨论】:

  • 谢谢你,马克,这正是我所需要的。感谢所有提供帮助和建议的人。非常感谢..
猜你喜欢
  • 2013-03-03
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多