0.0
No commit activity in last 3 years
No release in over 3 years
Data parsing, updating and transformation library.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

>= 0
>= 0
>= 0

Runtime

 Project Readme

parsed_data

Gem Version Build Status Coverage Status

(Very) experimental data parsing library that does two main things:

  1. It converts JSON or XML strings into a generic data structure consisting of arrays and hashes.
  2. It implements some extra support for querying and updating the data structure:
  • All hash keys in the structure can be accessed via dot notation (i.e., "a[:b]" could be written as "a.b")
  • This dot notation support is eager and recursive.

The data structure can also be converted back to some other data format. For example, a JSON string could be parsed, updated and then written back out as an XML string (using activesupport's built-in facilities for doing this.)

Installation

gem install parsed_data

Basic Usage

require 'parsed_data'

# Create an XML string to parse:
xml_str = <<-EOS
<?xml version="1.0" encoding="UTF-8"?>
  <a type="array">
    <a type="integer">1</a>
    <a type="integer">2</a>
    <a>
      <b type="array">
        <b type="integer">3</b>
        <b>
          <c type="integer">4</c>
        </b>
      </b>
      <c type="integer">5</c>
    </a>
  </a>
EOS

# Parse the string.
data = xml_str.to_data
=> #<ParsedData:0x00007fddaac20918 @source={"hash"=>{"a"=>[1, 2, {"b"=>[3, {"c"=>4}], "c"=>5}]}}

# Note that the parsed data structure has two "c" keys. There's one at the top
# level and another one embedded down deeper in the structure. The top-level value
# could be accessed like this:
data.c
=> 5

# To get the second "c" value embedded deeper in the structure you don't need to
# explicitly traverse the data structure. You just need to provide enough
# information to find the correct key.
data.a.c
=> 4

# To change this value:
data.a.c = 777
=> 777

# To write out an XML string for the updated data:
data.to_xml

# To write out a JSON string for the updated data:
data.to_json