Deep_search в большом json объекте по методу ruby - PullRequest
0 голосов
/ 20 февраля 2020

У меня проблема с фильтрацией JSON объекта в ruby! 1. Мой JSON объект представляет собой большой массив из двух хешей. 2. Это хэши включают в себя другие хэши, которые включают в себя другие массивы и хэши (о боже!: c). Моя цель - вывести Big ha sh, который содержит конкретную ценность! Примеры ниже: JSON файл, как в

[#That's hash 0{
        "id": 0,
        "firstName": "",
        "lastName": "",
        "middleName": null,
        "email": "",
        "phones": [
            null,
            null
        ],
        "groups": [{
            "id": 0,
            "name": ""
        }],
        "disabled": "",
        "technologies": [{
            "id": 0,
            "name": "",
            "children": [{
                "id": 1,
                "name": "",
                "children": [{
                    "id": 2,
                    "name": "Farmer",
                    "children": []
                }]
            }]
        }],
        "fullName": ""
    },
 #That's hash1{
        "id": 0,
        "firstName": "",
        "lastName": "",
        "middleName": null,
        "email": "",
        "phones": [
            null,
            null
        ],
        "groups": [{
            "id": 0,
            "name": ""
        }],
        "disabled": "",
        "technologies": [{
            "id": 0,
            "name": "",
            "children": [{
                "id": 1,
                "name": "",
                "children": [{
                    "id": 2,
                    "name": "Not Farmer",
                    "children": []
                }]
            }]
        }],
        "fullName": ""
    }
]

Псевдокод на ruby (что я хочу):

file = File.read("example.json") #=> Reading JSON file
data_hash = JSON.parse(file, object_class: Hash)  #=> Parsing JSON file

data = data_hash.filter #=> filter that hash if "technologies" is not empty!
data.get_hash_by_value(value) #=> For example i put "Not Farmer" in value, and that method must search in all data that (value) and output hash1 for me (because hash0 not include "Not Farmer")

Это большая проблема, я не знаю что делать!!! Мои мысли - это метод рекурсивного поиска ..

1 Ответ

0 голосов
/ 20 февраля 2020

Я написал свои собственные функции. Может быть, это может кому-то помочь.

def check_children(item)
  return true if item["name"] == "Farmer"
  item["children"].each do |child_item|
    break if check_children(child_item)
  end
  return false
end

data_hash.each do |item|
  next if item["technologies"].empty?
  item["technologies"].each do |technologies_item|
    next if technologies_item["children"].empty?
    technologies_item["children"].each do |children_item|
      data << item if check_children(children_item)
    end
  end
end
...