2016-03-29 2 views
2

ich zur Zeit ein verschachteltes JSON-Objekt habe, die RubyFilter durch verschachteltes JSON-Objekt und erhält JSON mit bestimmten Tasten, mit Ruby

{ 
"People": [ 
    { 
     "Name": "James", 
     "Age": "18", 
     "Gender": "Male", 
     "Sports": [] 
    }, 
    { 
     "Name": "Sarah", 
     "Age": "19", 
     "Gender": "Female", 
     "Sports": [ 
      "Soccer", 
      "Basketball", 
      "Football" 
     ] 
    } 
] 
} 

Seine neues ähnelt, strebe ich throught die gesamte json filtern und gebe nur die json-Objekt/Objekte, in denen das Array "Sport" Inhalt hat. So in dem obigen Szenario erwarte ich, dass das Objekt unten als endgültiges Ergebnis zu erhalten:

{ 
     "Name": "Sarah", 
     "Age": "19", 
     "Gender": "Female", 
     "Sports": [ 
      "Soccer", 
      "Basketball", 
      "Football" 
     ] 
    } 

Will ich ein neues Verfahren einzuleiten, zu erfüllen haben eine solche Tat? Oder würden in diesem Fall normale Ruby-Aufrufe funktionieren?

Antwort

2

Obwohl @philipyoo Antwort richtig ist, es eine Erklärung entgehen lassen, wie man "Filter" der syntaktisch JSON. Wenn Sie neu in Ruby sind, werfen Sie einen Blick auf Array#keep_if: http://ruby-doc.org/core-2.2.0/Array.html#method-i-keep_if

require 'json' 

people = JSON.parse("{long JSON data ... }") 
people_with_sports = people.fetch('People', []).keep_if do |person| 
    !person.fetch('Sports', []).empty? 
end 
+0

Dies ist nur entlang der Linien von dem, was ich suche. Allerdings scheint dies den Fehler "undefinierte Methode 'fetch'" auszulösen. Ich habe versucht, 'Karte' oder 'jeder tun', und ich bekomme die gleiche 'undefined Methode' Fehler – Iqen

+0

Können Sie mir den genauen Fehler sagen? "undefinierter Methodenfehler für XXX-Klasse". Was ist die XXX-Klasse? Kannst du mir mehr Informationen über den Inhalt von 'people' geben? Meine Vermutung ist, dass es kein Hash ist. Vielleicht aufgrund des JSON-Inhalts. – dvxam

+0

Macht nichts. Es war ein Fehler an meinem Ende. Ihre Antwort war genau das, wonach ich suchte. – Iqen

2

Wenn Sie ein JSON-Objekt von einer Anfrage erhalten, möchten Sie es analysieren und dann können Sie den Hash und die Arrays durchlaufen, um die benötigten Informationen zu finden. Siehe http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html

In Ihrem Fall so etwas wie diese:

require 'json' 

parsed_json = JSON.parse('{"People": [ ... ]}') 

parsed_json["People"].each do |person| 
    puts person if person["name"] == "Sarah" 
end 
Verwandte Themen