tonirilix / nested-json-flattener
一个用于扁平化嵌套JSON对象和嵌套数组的PHP包。它还允许您从扁平化数据创建CSV文件。
v2.1.2
2018-09-04 06:58 UTC
Requires (Dev)
- peekmo/jsonpath: dev-master
This package is not auto-updated.
Last update: 2024-09-25 11:49:19 UTC
README
一个用于扁平化嵌套JSON对象和嵌套数组的PHP包。它还允许您从扁平化数据创建CSV文件。
特性
-
该包允许您选择JSON对象或数组中的特定节点并将其扁平化。选定的节点可以是对象或集合。
-
它考虑了值在嵌套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();