keboola/json-parser

Keboola JSON to CSV 解析器

4.0.0 2024-07-30 12:06 UTC

README

描述

将 JSON 字符串解析成 CSV 文件。从一个 JSON 文件中创建多个表格。使用 Keboola\CsvFile 存储结果。JSON 的根必须是数组。JSON 解析器是 Generic Extractor 的一部分(也请参阅终端用户 文档)。

用法

use Keboola\Json\Parser;
$parser = new Parser(new Analyzer(new NullLogger(), new Structure()));
$file = file_get_contents("some/data.json");
$json = json_decode($file);

$parser->process($json);

$results = $parser->getCsvFiles(); // array of CsvFile objects

\Keboola\Json\Analyzer

为 JSON 解析器分析 JSON 数据。

__construct(\Psr\Log\LoggerInterface $logger, \Keboola\Json\Structure $structure, $nestedArraysAsJson, $strict)

  • $logger - 一个记录器,如果没有使用记录器,则使用 NullLogger
  • $structure - JSON 结构的表示。
  • $nestedArraysAsJson - 如果为 true,则嵌套数组将被编码为 JSON 字符串。如果为 false(默认),转换将失败。
  • $strict - 如果为 true,则将更严格地检查 JSON 节点数据类型(int、string 等)。

\Keboola\Json\Parser

将 JSON 数据解析成 CSV 文件。

__construct($analyzer, $definitions = [])

  • $definitions - 可选的数组,包含先前过程的结果。
  • $analyzer - 分析器类的实例。

process($data, $type, $parentId)

  • $data - 从 JSON 数据中检索的对象数组。
  • $type - 用于命名结果表。
  • $parentId - 可以是一个字符串,它将被保存在 JSON_parentId 列中,或者是一个包含 "column_name" => "value" 的数组,它将使用提供的数组键命名列。
  • 如果数据已分析,它将存储在缓存中,并且**不会解析**,直到调用 getCsvFiles() 方法。

getCsvFiles()

  • 返回一个包含解析结果的 \Keboola\CsvTable\Table 对象列表

解析特性

分析函数遍历数组的每一行(通常是一个结果数组),并将行传递给 analyzeRow() 方法。如果行只包含一个标量,它将被存储在一个 "data" 列中。如果行是一个对象,对象的每个变量将用作列名,其值将被分析

  • 如果是标量,它将被保存为该列的值。
  • 如果是数组,它将被传递给 analyze() 以创建一个新的表,通过生成的 JSON_parentId 列链接
  • 如果是另一个对象,它将被递归地解析为 analyzeRow(),其变量名称将添加到当前对象的名称前,例如
"parent": {
    "child" : "value1"
}

将导致一个 parent_child 列,其字符串类型为 "value1"。