Giter Club home page Giter Club logo

jsonpathstreamer's Introduction

JSON Path Streamer

Build Status Scrutinizer Code Quality

Uses salsify/jsonstreamingparser to parse a JSON file, and stream its tokens. This package adds features to simplify that process.

In a very big JSON file, it's very important to know where the parser is, to know which few parts to keep. It provides an interface for that. For very simple JSON parsing, there's even a configurable method, without any more parse/JSON formatting logic.

See examples/ for more examples. Run examples/speed.php for a speed comparison.

DIY - Surgical precision

// MUST implement gotPath() and gotValue()
class MyListener extends \rdx\jsonpathstreamer\PathAwareJsonListener {
	public function gotPath(array $path) {
		// Ignore valueless paths (empty arrays etc)
	}

	public function gotValue(array $path, $value) {
		// Save only values within {"foo": {"bar": {...}}}
		if (array_slice($path, 0, 2) == ['foo', 'bar']) {
			// Ignore long "description" texts
			if (end($path) != 'description') {
				$this->rememberValue(array_slice($path, 2), $value);
			}
		}
	}

	// Optional
	public function stopAfter() {
		// Stop parsing after foo/bar because there's nothing I want there
		return ['#foo/bar/#'];
	}
}

Configurable - easy

// MUST implement getRules()
class MyListener extends \rdx\jsonpathstreamer\RegexConfigJsonListener {
	public function getRules() {
		// Save only "name", for all users into their original position
		return [
			'#^users/[^/]+/(name)(/|$)#',
			'#^offices/[^/]+/(name)(/|$)#',
		];
	}
}

Configurable - conversion

// MUST implement getRules()
class MyListener extends \rdx\jsonpathstreamer\RegexTargetConfigJsonListener {
	public function getRules() {
		// Save only "name", for all users and offices, into the same list
		return [
			'#^users/([^/]+)/(name)(/|$)#' => 'entities/$1/$2',
			'#^offices/([^/]+)/(name)(/|$)#' => 'entities/$1/$2',
		];
	}
}

jsonpathstreamer's People

Contributors

rudiedirkx avatar

Watchers

 avatar

Forkers

metaworx

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.