tonirilix/nested-json-flattener

一个用于扁平化嵌套JSON对象和嵌套数组的PHP包。它还允许您从扁平化数据创建CSV文件。

v2.1.2 2018-09-04 06:58 UTC

This package is not auto-updated.

Last update: 2024-09-25 11:49:19 UTC


README

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

一个用于扁平化嵌套JSON对象和嵌套数组的PHP包。它还允许您从扁平化数据创建CSV文件。

特性

  1. 该包允许您选择JSON对象或数组中的特定节点并将其扁平化。选定的节点可以是对象或集合。

  2. 它考虑了值在嵌套JSON对象中存储的完整路径,并将其用作表头名称。以下是一个示例。

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

如果我们想扁平化该JSON对象并将其放入CSV文件中,结果如下

致谢

它基于csvwriter npm包的实现。

如何使用

如果您需要扁平化嵌套JSON字符串

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);

如果您需要扁平化嵌套数组

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);

如果您需要选择特定路径进行扁平化

阅读JsonPath文档以了解如何创建路径。

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);

如果您需要写入CSV文件

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();

待办事项

  1. 该包还需要从params获取配置。请参阅里程碑
  2. 考虑的一些参数包括:是否将原始数组视为一个元素(默认情况下视为一个元素)
  3. 添加一种创建配置的方法,告诉类如何处理内部集合。请参阅里程碑