【问题标题】:Talend extract JSON with a strange formatTalend 以一种奇怪的格式提取 JSON
【发布时间】:2021-12-01 20:17:08
【问题描述】:

Talend 有问题:我要提取一个很奇怪的 JSON 格式,它看起来像:

{"results":[{"id":0,"series":[{"name":"table1","columns":["column1","column2","column3","column4"],"values":[["Value1","Value2","Value3","Value4"],["Value1","Value2","Value3","Value4"],["Value1","Value2","Value3","Value4"],["Value1","Value2","Value3","Value4"],["Value1","Value2","Value3","Value4"]]}]}]}

在实践中,我们在“series”对象内部有“columns”对象,其中包含各个列的名称,“values”对象包含各个行的值。 所需的输出将是具有更正常格式的 table/csv/json,因此字段和值。 有谁知道我怎么能做到这一点?到目前为止,我已经尝试提取各种 JSON 字段,但输出如下:

Columns
Column1
Column2
Column3
Column4
values
["Value1","Value2","Value3","Value4"]
["Value1","Value2","Value3","Value4"]
["Value1","Value2","Value3","Value4"]
["Value1","Value2","Value3","Value4"]

(对于这个我可能必须提取另一个 JSON 字段,我想)。

谢谢大家

PS。我在帖子中添加了 Talend

【问题讨论】:

    标签: json field extract talend


    【解决方案1】:

    你没有指定任何语言,所以我猜任何语言都是公平的游戏?这个 PHP 脚本

    <?php
    
    $js=<<<'JS'
    {
        "results": [{
            "id": 0,
            "series": [{
                "name": "table1",
                "columns": ["column1", "column2", "column3", "column4"],
                "values": [
                    ["Value1", "Value2", "Value3", "Value4"],
                    ["Value1", "Value2", "Value3", "Value4"],
                    ["Value1", "Value2", "Value3", "Value4"],
                    ["Value1", "Value2", "Value3", "Value4"],
                    ["Value1", "Value2", "Value3", "Value4"]
                ]
            }]
        }]
    }
    JS;
    $data=json_decode($js,true);
    $extracted=array();
    foreach($data['results'] as $result){
        foreach($result['series'] as $serie){
            foreach($serie['values'] as $values){
                $extract=[];
                foreach($values as $valueKey=>$value){
                    $extract[$serie["columns"][$valueKey]]=$value;
                }
                $extracted[]=$extract;
            }
        }
    }
    echo json_encode($extracted,JSON_PRETTY_PRINT);
    

    输出

    
    [
        {
            "column1": "Value1",
            "column2": "Value2",
            "column3": "Value3",
            "column4": "Value4"
        },
        {
            "column1": "Value1",
            "column2": "Value2",
            "column3": "Value3",
            "column4": "Value4"
        },
        {
            "column1": "Value1",
            "column2": "Value2",
            "column3": "Value3",
            "column4": "Value4"
        },
        {
            "column1": "Value1",
            "column2": "Value2",
            "column3": "Value3",
            "column4": "Value4"
        },
        {
            "column1": "Value1",
            "column2": "Value2",
            "column3": "Value3",
            "column4": "Value4"
        }
    ]
    
    

    【讨论】:

    • 我正在使用 Talend Big Data
    • @wmbff 嗯,从来没有听说过 Talend,但是 php 脚本中使用的逻辑应该适用于几乎任何编程语言,祝你移植成功
    【解决方案2】:

    这是一种将结果作为 csv 文件获取的解决方案。

    我使用 tFixedFlowInput_1 和 tFixedFlowInput_3 作为您示例中的 json 的输入。
    tExtractJSONFields_1 从列数组中提取各个列,然后将其非规范化为一个文件。

    tExtractJSONFields_2 将值提取为数组,然后对于每个值,我们使用 tExtractJSONFields_3 提取单个值,并对每组值进行非规范化以在 tFileOutputDelimited_3 中获取一个 csv 行(以附加模式写入前一个文件)。

    最终的结果是这样的:

    column1,column2,column3,column4
    Value1,Value2,Value3,Value4
    Value1,Value2,Value3,Value4
    Value1,Value2,Value3,Value4
    Value1,Value2,Value3,Value4
    Value1,Value2,Value3,Value4
    

    我使用逗号作为分隔符,可以在 tDenormalize_1 和 tDenormalize_2 中更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多