json - 如何在不使用属性名称的情况下获取每个 JSON 对象的第二项?
问题描述
在下面的部分中,我想records
在这个 JSON 文件中获取第二个属性。如果我将[1]
in jObjects.SelectTokens("records[*].[1]")
替换为.Name
,我会得到正确的输出,但它仅限于名称。
If response.IsSuccessStatusCode Then
Try
Dim jObjects As JObject = JObject.Parse(jsonString)
For Each tk As JToken In jObjects.SelectTokens("records[*].[1]")
jsonList.Add(tk)
Next
For Each strng As String In jsonList
txtQueryOutput.AppendText(strng + vbCrLf)
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
该应用程序接受 SOQL 形式的查询,然后我将获取响应并对其进行解析。所以如果我查询SELECT name FROM contact
,我会得到这个:
"totalSize" : 21,
"done" : true,
"records" : [ {
"attributes" : {
"type" : "Contact",
"url" : "/services/data/v36.0/sobjects/Contact/0031U00000GtLxDQAV"
},
"Name" : "Jack Rogers"
}, {
"attributes" : {
"type" : "Contact",
"url" : "/services/data/v36.0/sobjects/Contact/0031U00000GlhHTQAZ"
},
"Name" : "Rose Gonzalez"
},
然后我可以查询SELECT phone FROM contact
并得到相同Name
的结果,除了 JSON 响应将是Phone
. [1]
有没有办法通过使用索引来获取每个对象中的所有第二个条目来做我想做的事情?
更新#1
为了澄清,我想在对象中的数组之后获取每个属性值。因此,如果我查询,那么我想要所有这些属性值,而不是属性数组值。这是我正在尝试/想要做的一个示例,尽管这不起作用并且在属性数组上崩溃:attributes
records
Name, Phone, Email
Dim data As List(Of JToken) = jObjects.Children().ToList
For Each item As JProperty In data
item.CreateReader()
Select Case item.Name
Case "records"
For Each subItem As JProperty In item
Select Case subItem.Name
Case "attributes"
'skip
Case Else
txtQueryOutput.AppendText(subItem.Value)
End Select
Next
End Select
Next
本质上,我想跳过属性数组,然后获取它之后的每个值。
解决方案
records
您可以从数组中的对象中获取所有属性值,不包括attributes
使用这样的 LINQ 查询:
Dim jObjects As JObject = JObject.Parse(jsonString)
Dim values As List(Of String) = jObjects("records") _
.Children(Of JObject) _
.SelectMany(Function(jo) jo.Properties()) _
.Where(Function(jp) jp.Name <> "attributes") _
.Select(Function(jp) CStr(jp.Value)) _
.ToList()
txtQueryOutput.AppendText(String.Join(vbCrLf, values))
推荐阅读
- c - C , 函数格式中指向结构的指针
- python - 重新运行调试器时如何避免重新加载包
- javascript - Javascript:时间表,将第一个单元格设为空白,尝试获取此输出
- java - 使用 lambda 实现 JavaRDD.top 的比较器会引发异常:org.apache.spark.SparkException: Task not serializable
- sql - 选择子查询分组依据
- c# - 更新后变量重置为零(Unity、C#)
- angular - 单击浏览器的后退按钮时,Angular 6 ngOnInit 未触发
- r - R:计算每列中的出现次数并将该列的值替换为计数(SQL?)
- php - Wordpress Avada 主题 - 删除 Woocommerce 结帐字段的 Square 付款问题
- javascript - 未捕获的类型错误:传输事件时无法读取未定义的属性“clientX”