如何在json文件中获得密钥的名称?我在VB.NET中解析一个json,其中一个“字段”有一个动态名称(它会发生变化)。我能做些什么才能弄到钥匙的名字?
例如:
..。
"one":{
"two":{
"example":[
{
"aaa":"test",
"bbb":"test",
"ccc":"test"
},..。
我得到了所有的值(测试,测试,测试.)而键‘1’,‘2’,总是有相同的名字。但是键‘示例’根据json文件信息更改名称。我怎样才能识别关键的文本?
发布于 2017-12-01 04:17:34
我认为这个问题已经解决了,但我想为未来的读者提出另一个解决方案。JavaScriptSerializer可以返回嵌套的字典集合(字符串、对象)。我发现在编写代码时更容易探索调试的结果。下面的代码显示了如何导航集合的示例。
Dim deserializer As New System.Web.Script.Serialization.JavaScriptSerializer
Dim text As String = "{""two"":{""example"":[{""aaa"":""test"",""bbb"":""test"",""ccc"":""test""}]}}"
Dim dict As Dictionary(Of String, Object) = deserializer.DeserializeObject(text)
Dim keys As Dictionary(Of String, Object).KeyCollection
keys = dict("two")("example")(0).Keys
Dim aaaName As String = keys(0)
Dim aaaValue As String = dict("two")("example")(0)(aaaName)发布于 2017-11-30 17:31:10
我在这里编写了一段将JSON转换为XDocument的代码:https://github.com/dday9/.NET-JSON-Transformer
如果要使用该代码,则可以获取表示“两个”对象的节点,然后将第一个子节点输入到。通过这样做,您实际上是通过索引而不是名称来获得数组。
下面是我的意思的一个简单例子:
Dim literal As String = "{""two"":{""example"":[{""aaa"":""test"",""bbb"":""test"",""ccc"":""test""}]}}"
Dim xJSON As XDocument = JSON.Parse(literal)
Dim object_two As XElement = xJSON.Descendants("two").FirstOrDefault()
If object_two IsNot Nothing Then
Dim first_descendent As XElement = object_two.Descendants().Skip(1).FirstOrDefault()
If first_descendent IsNot Nothing Then
Console.WriteLine(first_descendent)
End If
End If小提琴:现场演示
发布于 2021-03-05 16:59:27
这部分允许从未知的JSON结构中获取数据,而不必定义类。
示例
Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer
serializer = New JavaScriptSerializer()
' {"elements":[{"handle~":{"emailAddress":"myself@example.com"},"handle":"urn:li:emailAddress:348955221"}]}
dim json as string
Dim obj As System.Collections.Generic.IDictionary(Of String, Object)
obj = serializer.Deserialize(Of System.Collections.Generic.IDictionary(Of String, Object))(json)
dim email as string=string.empty
email = If(GetJsonValue(obj, {"elements", "handle~", "emailAddress"}.ToList()), email)功能,非常自我描述:
''' <summary>decode json data </summary>
Public Function GetJsonValue(ByVal obj As Object,
ByVal key As List(Of String)) As String
GetJsonValue = Nothing
' If the object is an array, assume any element can contain the key
If obj.GetType Is GetType(Object()) Then
For Each newObj As Object In CType(obj, Object())
Dim tmp As String = GetJsonValue(newObj, key)
If Not String.IsNullOrEmpty(tmp) Then Return tmp
Next
Else
Dim objEle As System.Collections.Generic.IDictionary(Of String, Object)
Dim keyName As String
Dim objKey As String
'
keyName = key(0)
objEle = CType(obj, System.Collections.Generic.IDictionary(Of String, Object))
objKey = objEle.Keys.ToArray()(0)
If objEle.ContainsKey(keyName) Then
Dim temp As Object = objEle.Item(keyName)
If key.Count > 1 Then
' if the element is array, we need to get the array element and move to the next
key.RemoveAt(0)
Return GetJsonValue(temp, key)
Else
Return temp.ToString()
End If
End If
End If端函数
https://stackoverflow.com/questions/47578817
复制相似问题