程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了解析嵌套的 JSON 并在 Ruby 中操作它大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决解析嵌套的 JSON 并在 Ruby 中操作它?

开发过程中遇到解析嵌套的 JSON 并在 Ruby 中操作它的问题如何解决?下面主要结合日常开发的经验,给出你关于解析嵌套的 JSON 并在 Ruby 中操作它的解决方法建议,希望对你解决解析嵌套的 JSON 并在 Ruby 中操作它有所启发或帮助;

这是我第一次尝试用 Ruby 解析嵌套的 JsON。例如,我需要通过 JsON 提取“_ID”、“name”和“type”的特定值。然后我需要创建一个引用表,以便我可以引用每个“_ID”和相关信息。我还需要组合来自多个 JsON 响应的信息。我已经能够获得基本信息并尝试了一些我在网上找到的东西。我只需要一个起点的帮助。如果有人对从哪里开始有任何想法,我将不胜感激。

设备 JsON 响应哈希。每个设备都以 _ID 开头。

{
"API": "1.0","error": null,"ID": "60b5d4c3077862123cfa4443","result": {
    "devices": [
        {
            "_ID": "123456787786211fd31f3dd","batteryPowered": true,"category": "door_lock","deviCETypEID": "144_1_1","firmware": [
                {
                    "ID": "us.144.1_1.0","version": "2.6"
                }
            ],"gatewayID": "1234567807786214fbc6bd4e","info": {
                "firmware.stack": "3.28","harDWare": "0","manufacturer": "Kwikset","model": "912","protocol": "zwave","zwave.node": "2","zwave.smartstart": "no"
            },"name": "Garage Door","parentdevicEID": "","persistent": false,"reachable": false,"ready": true,"roomID": "1234567807786211fd31f3eb","security": "mIDdle","status": "IDle","subcategory": "","type": "doorlock"
        },{
            "_ID": "1234567897786211fd31f3ed","deviCETypEID": "59_1_1129","firmware": [
                {
                    "ID": "us.59.18064.0","version": "3.3"
                },{
                    "ID": "us.59.18065.1","version": "11.0"
                }
            ],"gatewayID": "1234567897786214fbc6bd4e","info": {
                "firmware.stack": "6.3","harDWare": "3","manufacturer": "Schlage","model": "BE469ZP","zwave.node": "3","name": "Front Door","reachable": true,"roomID": "1234567807786211fd31f3ec","security": "high",{
            "_ID": "1234567897786211fd31f40a","batteryPowered": false,"category": "switch","deviCETypEID": "57_20562_12344","firmware": [
                {
                    "ID": "us.57.29240.0","version": "5.25"
                }
            ],"info": {
                "firmware.stack": "4.54","harDWare": "255","manufacturer": "honeywell","model": "ZW4103/39337","zwave.node": "4","name": "Lamp Switch","roomID": "1234567807786211fd31f416","security": "no","subcategory": "interior_plugin","type": "switch.outlet"
        },{
            "_ID": "1234567b07786211fd31f40e","category": "dimmable_light","deviCETypEID": "57_20548_12339","firmware": [
                {
                    "ID": "us.57.29747.0","version": "5.21"
                }
            ],"gatewayID": "1234567d07786214fbc6bd4e","info": {
                "firmware.stack": "4.34","model": "39339/ZW3107","zwave.node": "5","name": "Lamp Dimmer","subcategory": "dimmable_plugged","type": "dimmer.outlet"
        }
    ]
}

}

然后还有一个 JsON 响应,以上述相同的格式列出每个设备的功能。但是,不是“devices”=>,而是“items”=>,而海滩功能又是 _ID 键。

我想将函数 _ID 标签和描述与设备 JsON 结合起来,这样我就可以创建一种方法来发送我的脚本“解锁门锁 1”,并用设备的 _ID 和函数 _ID 替换数字.

解决方法

您可以从一个非常粗略的导航器功能开始,如下所示:

def find_device(data,name,indeX)
  # Filter through the device list...
  data['result']['devices'].SELEct do |device|
    # ...for matching names.
    device.name == name
  end[index] # Take indexed entry
end

现在您可以在何处执行 find_device(data,'door_lock',0) 来挖掘该条目。

"door lock 1" 转换为 [ 'door_lock',0 ] 应该非常简单:

def to_LOCATIOn(str)
  # Split off the name component(s) and index number
  *name,index = str.split(/\s+/)

  # Reassemble with underscores and -1 to account for 0-index
  [ name.join('_'),index.to_i - 1 ]
end

大佬总结

以上是大佬教程为你收集整理的解析嵌套的 JSON 并在 Ruby 中操作它全部内容,希望文章能够帮你解决解析嵌套的 JSON 并在 Ruby 中操作它所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。