从Ruby中的JSON对象中提取元素并比较元素



我有许多类似于下面的json资源。但是,我只需要获取满足以下两个条件的json资源:(1( component.code.text==舒张压(2( valueQuantity.value<90

这是JSON对象/资源


{
"fullUrl": "urn:uuid:edf9439b-0173-b4ab-6545 3b100165832e",
"resource": {
"resourceType": "Observation",
"id": "edf9439b-0173-b4ab-6545-3b100165832e",
"component": [ {
"code": {
"coding": [ {
"system": "http://loinc.org",
"code": "8462-4",
"display": "Diastolic Blood Pressure"
} ],
"text": "Diastolic Blood Pressure"
},
"valueQuantity": {
"value": 81,
"unit": "mm[Hg]",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}, {
"code": {
"coding": [ {
"system": "http://loinc.org",
"code": "8480-6",
"display": "Systolic Blood Pressure"
} ],
"text": "Systolic Blood Pressure"
},
"valueQuantity": {
"value": 120,
"unit": "mm[Hg]",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
} ]
},

}

JSON文件

我需要写一个条件来获取带有文本的资源:";舒张压";AND值Quantity.value>90

我已经写了以下代码:

def self.hypertension_observation(bundle)
entries = bundle.entry.select {|entry| entry.resource.is_a?(FHIR::Observation)}
observations = entries.map {|entry| entry.resource}
hypertension_observation_statuses = ((observations.select {|observation| observation&.component&.at(0)&.code&.text.to_s == 'Diastolic Blood Pressure'}) && (observations.select {|observation| observation&.component&.at(0)&.valueQuantity&.value.to_i >= 90}))
end

我得到的输出没有任何错误。但是,第二个条件在输出中没有得到满足。输出包含偶数值<90.

请任何人帮助更正此ruby代码,该代码仅关于获取,输出包含值<90

我将根据json数据的(编辑的(版本,写下我将如何处理这样的问题。我推断,完整的json文件是一些包含医疗数据的记录列表,我们只想获取个人舒张压读数<90.

如果你想在Ruby中做到这一点,我建议你使用Ruby发行版附带的JSON解析器。这样做的目的是获取一些(希望是有效的(json数据,并返回一个Ruby哈希数组,每个数组都有嵌套的数组和哈希。在我的解决方案中,我将您发布的json保存到一个文件中,因此我会做如下操作:

require 'json'
require 'pp'
json_data = File.read("medical_info.json")
parsed_data = JSON.parse(json_data)
fetched_data = []
parsed_data.map do |record|
diastolic_text = record["resource"]["component"][0]["code"]["text"]
diastolic_value_quantity = record["resource"]["component"][0]["valueQuantity"]["value"]
if diastolic_value_quantity < 90
fetched_data << record
end
end 
pp fetched_data

这将打印一个新的哈希数组,其中只包含具有所需舒张压值的结果。"pp"宝石代表"Pretty Print",它并不完美,但使层次结构更容易阅读。

我发现,当面对我想在Ruby中解析的深度嵌套的JSON数据时,我会将JSON数据保存到一个文件中,就像我在这里所做的那样,然后在文件所在的目录中,我运行IRB,这样我就可以访问我要找的哈希值和数组元素了。

最新更新