Parsing from a JSON file in Ruby and extracting numbers from nested hashes

Now I am working on extracting information from a JSON file in Ruby. Then how can I extract only the numbers next to the word β€œrating” from the following text file? For example, I want to get 0.6748984055823062, 0.6280145725181376.

{ "sentiment_analysis": [ { "positive": [ { "sentiment": "Popular", "topic": "games", "score": 0.6748984055823062, "original_text": "Popular games", "original_length": 13, "normalized_text": "Popular games", "normalized_length": 13, "offset": 0 }, { "sentiment": "engaging", "topic": "pop culture-inspired games", "score": 0.6280145725181376, "original_text": "engaging pop culture-inspired games", "original_length": 35, "normalized_text": "engaging pop culture-inspired games", "normalized_length": 35, "offset": 370 }, "negative": [ { "sentiment": "get sucked into", "topic": "the idea of planning", "score": -0.7923352042939829, "original_text": "Students get sucked into the idea of planning", "original_length": 45, "normalized_text": "Students get sucked into the idea of planning", "normalized_length": 45, "offset": 342 }, { "sentiment": "be daunted", "topic": null, "score": -0.5734506634410159, "original_text": "initially be daunted", "original_length": 20, "normalized_text": "initially be daunted", "normalized_length": 20, "offset": 2104 }, 

What I tried was that I could read the file and set the text file to a hash variable using the JSON method.

 require 'json' json = JSON.parse(json_string) 
+16
source share
3 answers

You can use Array#map to collect reviews.

 reviews = json['sentiment_analysis'][0] positive_reviews = reviews['positive'] negative_reviews = reviews['negative'] positive_reviews.map { |review| review['score'] } => [0.6748984055823062, 0.6280145725181376] negative_reviews.map { |review| review['score'] } => [-0.7923352042939829, -0.5734506634410159] 

Hope this helps!

+6
source

Using the JSON class:

Import file:

 require "json" file = File.open "/path/to/your/file.json" data = JSON.load file 

If you wish, you can close it now:

 file.close 

The file looks like this:

 { "title": "Facebook", "url": "https://www.facebook.com", "posts": [ "lemon-car", "dead-memes" ] } 

Now the file can be read like this:

 data["title"] => "Facebook" data.keys => ["title", "url", "posts"] data['posts'] => ["lemon-car", "dead-memes"] data["url"] => "https://www.facebook.com" 

Hope this helps!

+24
source

Parsing data from a file

data_hash = JSON.parse(File.read('file-name-to-be-read.json'))

Then just match the data!

 reviews = data_hash['sentiment_analysis'].first reviews.map do |sentiment, reviews| puts "#{sentiment} #{reviews.map { |review| review['score'] }}" end 

I think this is the easiest answer.

+8
source

Source: https://habr.com/ru/post/1012848/


All Articles