【发布时间】:2025-12-29 10:30:07
【问题描述】:
我正在尝试使用 Powershell 访问 JSON 对象的特定属性值。不幸的是,我不知道结构中某些父属性的键,所以我不能直接这样做。此外,由于 JSON 不是数组,我无法通过索引位置访问。
上下文是我正在从 elasticsearch 查询正在运行的任务列表,并且需要获取任务的 ID(我知道只有一个),以便我可以进行后续调用以发现其完成状态。
我研究了一些查询方法,但不确定如何应用它们(PowerShell 语法对我来说很新)。
我正在使用的 JSON 响应如下所示;
"nodes" : {
"oTUltX4IQMOUUVeiohTt8A" : {
"name" : "H5dfFeA",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"tasks" : {
"oTUltX4IQMOUUVeiohTt8A:124" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 124,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 47402,
"cancellable" : false,
"parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
}
}
}
}
}
有了这个给定的结构,我希望能够访问第一个“任务”的 ID 属性。
所以如果我知道道具键,那就是:
nodes.oTUltX4IQMOUUVeiohTt8A.tasks.oTUltX4IQMOUUVeiohTt8A:124.id
如何在事先不知道密钥的情况下访问此值?
非常感谢任何帮助。
谢谢 尼克
【问题讨论】:
-
在PowerShell 6“-AsHastable”中,可以直接反序列化为简单的hastable类型,轻松支持key枚举。不要问我为什么几年前没有实现它。但是请注意,每个 JSON 确实没有“第一个”对象,出于兼容性原因,不应使用此类对象。 (一个例外是维护人类偏好排序的工具,这与信息交换不同!)
-
写。上图:如果数据来自外部来源,请为“第一”或其他顺序确定更可靠的方法。
-
@user2864740:虽然获取属性名称的哈希表表示可能稍微容易一些,但这不是必需的:使用
.psobject.properties.Name。
标签: json powershell elasticsearch