简体   繁体   中英

How to extract data from Firebase realtime database JSON-export

I have a Firebase realtime-database export-json that has nested informations, that I would like to extract. The structure of the JSON looks like this:

{
  "users" : {
    "024w97mv8NftGFY8THfQIU6PhaJ3" : {
      "email" : "xxx",
      "id" : "024w97mv8NftGFY8THfQIU6PhaJ3",
      "name" : "xxx",
      "items" : {
        "-LQL9n-r9BGdo3HJZ2sk" : {
          "disliked" : true,
          "id" : 396,
          "name" : "Aaa"
        },
        "-LQL9oO63nH-QW2w6zz0" : {
          "liked" : true,
          "id" : 3674,
          "name" : "Bbb"
        }
      }
    },
    "0ERLT5DLRvbZUnjlnM7Ow0qItpz2" : {
      "email" : "zzz",
      "id" : "0ERLT5DLRvbZUnjlnM7Ow0qItpz2",
      "name" : "zzz",
      "items" : {
        "-LIZnriSVQMzqTsPFNYa" : {
          "id" : 396,
          "liked" : true,
          "name" : "Aaa"
        },
        "-LIZnrzOuk4WyjqEiLG8" : {
          "disliked" : true,
          "id" : 4805,
          "name" : "Ccc"
        }
      }
    }
  }
}


What I need to achieve is getting a list of all liked item-names, and ideally counting how often an item is liked.

Is there a simple tool or script to do that? Ruby or Javascript would be preferred. Thanks a lot!

You can parse your JSON data in ruby like below

result_hash = JSON.parse(result)
result_ary = result_hash["users"].collect do |k,v| 
  v["items"].values.select{|v1| v1["liked"] == true } 
end
result_data = result_ary.flatten

result of parsing

=> [{"liked"=>true, "id"=>3674, "name"=>"Bbb"}, {"id"=>396, "liked"=>true, "name"=>"Aaa"}]

Now its very easy for getting your required result

result_data.collect{|x| x["name"] }
=> ["Bbb", "Aaa"]

 result_data.count {|x| x["name"] == "Aaa"}
=> 1

result_data.count {|x| x["name"] == "Bbb"}
=> 1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM