nested-json-flattener

A php package to flatten nested json objects and nested arrays (Based on csvwriter npm package implementation)

  • Owner: tonirilix/nested-json-flattener
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

NestedJsonFlattener

Code Climate Build Status
codecov
Latest Stable Version Total Downloads Latest Unstable Version License

A php package to flatten nested json objects and nested arrays. It also allows you to create csv files from the flattened data.

Features

  1. The package allows you to select a specific node of the json object or array and flat it. The selected node can be flattened whether is a object or collection.

  2. It takes in count the full path where a value is stored in a nested json object and uses it as header name. Let's use the example below.

{
	"name": "This is a name",
	"nested": {
		"type": "This is a type",
		"location": "Earth",
		"geo": {
			"latitude": "1234567890",
			"longitude": "0987654321"
		},
		"primitivesCollection":[123, 456, 789]
	}	
}

If we'd like to flat that json object and put it into a csv file, the result would be as follows:, name, nested.type, nested.location, nested.geo.latitude, nested.geo.longitude, nested.primitivesCollection, ------------------, ------------------, -----------------, ---------------------, ----------------------, -----------------------------, This is a name, This is a type, Earth, 1234567890, 0987654321, 123, 456, 789, ## Credits
It's based on csvwriter npm package implementation.

How to use it

If you need to flat a nested json string

use NestedJsonFlattener\Flattener\Flattener;
$dataJson = '{
	"name": "This is a name",
	"nested": {
		"type": "This is a type",
		"location": "Earth",
		"geo": {
			"latitude": "1234567890",
			"longitude": "0987654321"
		},
		"primitivesCollection":[123, 456, 789]
	}	
}';

$flattener = new Flattener();
$flattener->setJsonData($dataJson);
$flat = $flattener->getFlatData();
print_r($flat);

If you need to flat a nested array

use NestedJsonFlattener\Flattener\Flattener;
$data = [
	'name' => 'This is a name', 
	'nested' => [
		'type' => 'This is a type',
		'location' => 'Earth',
		'geo' => [
			'latitude'=> '1234567890',
			'longitude'=> '0987654321'
		],
		'primitivesCollection'=> [123, 456, 789]
	]
];

$flattener = new Flattener();
$flattener->setArrayData($data);
$flat = $flattener->getFlatData();
print_r($flat);

If you need to select a specific path to be flattened

Read JsonPath documentation from Stefan Goessner to learn how to create paths.

use NestedJsonFlattener\Flattener\Flattener;
$data = [
	'name' => 'This is a name', 
	'nested' => [
		'type' => 'This is a type',
		'location' => 'Earth',
		'geo' => [
			'latitude'=> '1234567890',
			'longitude'=> '0987654321'
		],
		'primitivesCollection'=> [123, 456, 789]
	]
];
// This is a path based on JsonPath implementation
$options = ['path'=>'$.nested'];

$flattener = new Flattener($options);
$flattener->setArrayData($data);
$flat = $flattener->getFlatData();
print_r($flat);

If you need to write a csv file

use NestedJsonFlattener\Flattener\Flattener;
$data = [
	'name' => 'This is a name', 
	'nested' => [
		'type' => 'This is a type',
		'location' => 'Earth',
		'geo' => [
			'latitude'=> '1234567890',
			'longitude'=> '0987654321'
		],
		'primitivesCollection'=> [123, 456, 789]
	]
];
$flattener = new Flattener();
$flattener->setArrayData($data);
$flattener->writeCsv();

TODO

  1. The package still needs to get configurations from params. See milestone
  2. Some of the params in mind are: whether take primitives arrays as one element or not (taken as one element by default)
  3. Add a way to create a configuration to tell the class how to handle internal collections. See milestone

Main metrics

Overview
Name With Ownertonirilix/nested-json-flattener
Primary LanguagePHP
Program languagePHP (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2016-01-19 04:15:05
Pushed At2024-01-11 00:43:37
Last Commit At2018-09-05 02:58:52
Release Count11
Last Release Namev2.1.2 (Posted on )
First Release Namecvswriter_v1.0.0 (Posted on 2016-01-19 00:02:26)
用户参与
Stargazers Count23
Watchers Count4
Fork Count11
Commits Count92
Has Issues Enabled
Issues Count13
Issue Open Count10
Pull Requests Count8
Pull Requests Open Count1
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private