фильтрация json с другим значением head в ruby - PullRequest
0 голосов
/ 06 июня 2018

У меня есть такой хэш

{"1515599671"=>
  {"Path"=>"images/1515599671.jpeg",
   "Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>1,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}},
 "1525357331"=>
  {"Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>0,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}},
 "1525357336"=>
  {"Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>0,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}},
 "1525357341"=>
  {"Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>0,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}},
 "1525357346"=>
  {"Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>0,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}},
 "1525357448"=>
  {"Path"=>"images/1525357448.jpeg",
   "Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>1,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}},
 "1525357449"=>
  {"Path"=>"images/1525357449.jpeg",
   "Tags"=>
    {"Anger"=>0,
     "Disgust"=>0,
     "FaceDetected"=>1,
     "Fear"=>0,
     "Happiness"=>0,
     "LargeFaceDetected"=>0,
     "MotionDetected"=>0,
     "Neutral"=>0,
     "Sadness"=>0,
     "Surprise"=>0}}}

, в котором у многих значений нет Path, а у немногих из них есть путь, я хочу отфильтровать этот хэш, чтобы получить хэшв котором будут только те значения, у которых есть Path внутри, я пытался сделать .each и map, но он не работает на нем?любая помощь будет оценена спасибо

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Для этой цели вы можете использовать iteraptor самоцвет:

require 'iteraptor'
hash = { ... }

keys = hash.iteraptor.select(/\APath\z/).keys
#⇒ ["1515599671", "1525357448", "1525357449"]

hash.select { |k, _| keys.include? k }
0 голосов
/ 06 июня 2018

Вы можете использовать выберите в Hash для этого:

hash = {"1515599671"=>{"Path"=>"images/1515599671.jpeg", "Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>1, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357331"=>{"Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>0, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357336"=>{"Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>0, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357341"=>{"Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>0, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357346"=>{"Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>0, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357448"=>{"Path"=>"images/1525357448.jpeg", "Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>1, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357449"=>{"Path"=>"images/1525357449.jpeg", "Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>1, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}}

hash.select { |key, value| value['Path'] }    # Returns key-value pairs only with 'Path' set in its value. Modify the condition to remove empty strings, if you need to
 => {"1515599671"=>{"Path"=>"images/1515599671.jpeg", "Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>1, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357448"=>{"Path"=>"images/1525357448.jpeg", "Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>1, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}, "1525357449"=>{"Path"=>"images/1525357449.jpeg", "Tags"=>{"Anger"=>0, "Disgust"=>0, "FaceDetected"=>1, "Fear"=>0, "Happiness"=>0, "LargeFaceDetected"=>0, "MotionDetected"=>0, "Neutral"=>0, "Sadness"=>0, "Surprise"=>0}}}


# Question update
hash.select { |key, value| value['Path'] && value['Tags'] && (value['Tags']['Anger'] == 1) }    # Select those with 'Path' set and 'Tags.Anger' with value 1
 => {}     # You don't have any such objects in your example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...