gpt4 book ai didi

ruby:从嵌套的 json 中提取字段

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:52 26 4
gpt4 key购买 nike

我正在尝试自学 ruby​​ 并解决工作中的问题。我的最终目标是从 API 的 JSON 响应中提取出三个字段,进行操作并转储到 CSV 以进行执行报告。

JSON 的结构是:

{
"status": 200,
"data": {
"total": 251,
"alerts": [
{
"dataPoint": "x",
"ackedBy": "x",
"dataSourceInstance": "x",
"dataSource": "x",
"host": "x",
"endOn": 0,
"ackedOn": 1385085190,
"dataSourceInstanceId": 588384,
"hostId": 935,
"type": "alert",
"dataSourceId": 694,
"ackedOnLocal": "2013-11-21 17:53:10 PST",
"id": 6170384,
"startOn": 1385084917,
"thresholds": "!= 1 1 1",
"endOnLocal": "",
"level": "error",
"ackComment": "x",
"value": "No Data",
"hostDataSourceId": 211986,
"acked": true,
"hostGroups": [{
"alertEnable": true,
"createdOn": 1362084592,
"id": 21,
"parentId": 78,
"description": "",
"appliesTo": "",
"name": "2600hz",
"fullPath": "x"
}],
"startOnLocal": "2013-11-21 17:48:37 PST"
},

具体来说,我想提取出dataPointstartOnackedOn

我想我需要先提取总值,这样我才能知道我有多少警报。这将帮助我遍历警报实例。

*url = "https://xyz"
uri = URI(url)
http = Net::HTTP.new(uri.host, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
req = Net::HTTP::Get.new(uri.request_uri)
response = http.request(req)

# Make sure we had a proper web response
if response.code == '200' then

# Set up that the total is two levels deep in the json
path = JsonPath.new('$.total')

# Extract out total field into variable
totalAlerts = path.on(response)

# Print hash to confirm value
pp totalAlerts

end*

我一直在试图提取总数。输出什么都不显示:

sudo ruby alerts.rb
[]

有更好的方法吗?

最佳答案

试试这个:

# just for demonstration, you would probably do json = JSON.parse(response)
json = {
"status": 200,
"data": {
"total": 251,
"alerts": [
{
"dataPoint": "x",
"ackedBy": "x",
...

总计:

total = json['data']['total']

对于您询问的其他值:

json['data']['alerts'].each do |alerts|
# do whatever you want with these...
alerts['dataPoint']
alerts['startOn']
alerts['ackedOn']

现在的问题是,你想对结果做什么?你想把它们收集到一个新的散列中吗? json['data']['alerts'] 是一个数组,因此您必须决定如何收集它们。你可以这样做:

collected_alerts = { 'dataPoints' => [], 'startOns' => [], 'ackedOns' => [] }
json['data']['alerts'].each do |alerts|
collected_alerts['dataPoints'] << alerts['dataPoint']
collected_alerts['startOns'] << alerts['startOn']
collected_alerts['ackedOns'] << alerts['ackedOn']
end

现在您可以在 collected_alerts 中获取所有这些值

关于ruby:从嵌套的 json 中提取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com