Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用json数据格式化csv文件?_Json_Excel_Csv_Converter - Fatal编程技术网

如何使用json数据格式化csv文件?

如何使用json数据格式化csv文件?,json,excel,csv,converter,Json,Excel,Csv,Converter,我有一个json文件需要转换成csv文件,但我有点担心会信任json-to-csv转换器站点,因为输出的数据似乎不正确。。。所以我希望能得到一些帮助 我有以下json文件结构: { "GroupName": "GrpName13", "Number": 3, "Notes": "Test Group ", "Units": [ { "UnitNumber": "TestUnit13", "DataSource": "Fact

我有一个json文件需要转换成csv文件,但我有点担心会信任json-to-csv转换器站点,因为输出的数据似乎不正确。。。所以我希望能得到一些帮助

我有以下json文件结构:

{
    "GroupName": "GrpName13",
    "Number": 3,
    "Notes": "Test Group ",
    "Units": [
    {
        "UnitNumber": "TestUnit13",
        "DataSource": "Factory",
        "ContractNumber": "TestContract13",
        "CarNumber": "2",
        "ControllerTypeMessageId" : 4,
        "NumberOfLandings": 4,
        "CreatedBy": "user1",
        "CommissionModeMessageId": 2,
        "Details": [
        {
            "DetailName": "TestFloor13",
            "DetailNumber": "5"
        }
        ],
        "UnitDevices": [
        {
            "DeviceTypeMessageId": 1,
            "CreatedBy": "user1"
        }                               
        ]
    }
    ]
}
我认为我看到的问题是转换器似乎无法理解许多嵌套的数据值。我认为转换器是错误的原因是,当我尝试使用它们转换回json时,我没有收到相同的结构

是否有人知道如何手动将此json格式化为csv格式,或者知道可以处理嵌套值的可靠转换器

www.json-buddy.com/convert-json-csv-xml.htm

如果不适合你,那么你可以试试这个工具

应该是有帮助的

试试看

www.json-buddy.com/convert-json-csv-xml.htm

如果不适合你,那么你可以试试这个工具


应该是有帮助的

我已经在这个url上尝试了你的json:

因此: UnitNumber、DataSource、ContractNumber、CarNumber、ControllerTypeMessageId、NumberOfLandings、CreatedBy、CommissionModeMessageId、Details/0/DetailName、Details/0/DetailNumber、UnitDevices/0/DeviceTypeMessageId、UnitDevices/0/CreatedBy 测试单元13,工厂,测试合同13,2,4,4,用户1,2,测试车间13,5,1,用户1

因为它可以保存键的路径,就像列表“UnitDevices”中的“DeviceTypeMessageId”:它将列名称命名为“UnitDevices/0/DeviceTypeMessageId”,这可以避免相同的名称错误,因此您可以通过其转换器规则获取列名称


希望对您有所帮助。

我已经在这个url上尝试了您的json:

因此: UnitNumber、DataSource、ContractNumber、CarNumber、ControllerTypeMessageId、NumberOfLandings、CreatedBy、CommissionModeMessageId、Details/0/DetailName、Details/0/DetailNumber、UnitDevices/0/DeviceTypeMessageId、UnitDevices/0/CreatedBy 测试单元13,工厂,测试合同13,2,4,4,用户1,2,测试车间13,5,1,用户1

因为它可以保存键的路径,就像列表“UnitDevices”中的“DeviceTypeMessageId”:它将列名称命名为“UnitDevices/0/DeviceTypeMessageId”,这可以避免相同的名称错误,因此您可以通过其转换器规则获取列名称

希望对您有所帮助。

这里有一个使用

如果文件
filter.jq
包含

def denormalize:
  def headers($p):
      keys_unsorted[] as $k
    | if   .[$k]|type == "array" then (.[$k]|first|headers("\($p)\($k)_"))
      else "\($p)\($k)"
      end
  ;
  def setup:
    [
      keys_unsorted[] as $k
    | if   .[$k]|type == "array" then [ .[$k][]| setup ]
      else .[$k]
      end
    ]
  ;
  def iter:
    if length == 0 then []
    elif .[0]|type != "array" then
      [.[0]] + (.[1:] | iter)
    else
        (.[0][] | iter) as $x
      | (.[1:]  | iter) as $y
      | [$x[]] + $y
    end
  ;
  [ headers("") ], (setup | iter)
;

denormalize | @csv
data.json
包含(注意添加了额外的示例)

然后命令

jq -M -r -f filter.jq data.json    
将产生

"GroupName","Notes","Number","Units_CarNumber","Units_CommissionModeMessageId","Units_ContractNumber","Units_ControllerTypeMessageId","Units_CreatedBy","Units_DataSource","Units_Details_DetailName","Units_Details_DetailNumber","Units_NumberOfLandings","Units_UnitDevices_CreatedBy","Units_UnitDevices_DeviceTypeMessageId","Units_UnitNumber"
"GrpName13","Test Group ",3,"2",2,"TestContract13",4,"user1","Factory","TestFloor13","5",4,"user1",1,"TestUnit13"
"GrpName13","Test Group ",3,"2",2,"TestContract13",4,"user1","Factory","TestFloor13","5",4,"user10",10,"TestUnit13"
"GrpName13","Test Group ",3,"99",99,"Contract99",99,"user99","Another Factory","TestFloor99","99",99,"user99",99,"Unit99"
下面是一个使用

如果文件
filter.jq
包含

def denormalize:
  def headers($p):
      keys_unsorted[] as $k
    | if   .[$k]|type == "array" then (.[$k]|first|headers("\($p)\($k)_"))
      else "\($p)\($k)"
      end
  ;
  def setup:
    [
      keys_unsorted[] as $k
    | if   .[$k]|type == "array" then [ .[$k][]| setup ]
      else .[$k]
      end
    ]
  ;
  def iter:
    if length == 0 then []
    elif .[0]|type != "array" then
      [.[0]] + (.[1:] | iter)
    else
        (.[0][] | iter) as $x
      | (.[1:]  | iter) as $y
      | [$x[]] + $y
    end
  ;
  [ headers("") ], (setup | iter)
;

denormalize | @csv
data.json
包含(注意添加了额外的示例)

然后命令

jq -M -r -f filter.jq data.json    
将产生

"GroupName","Notes","Number","Units_CarNumber","Units_CommissionModeMessageId","Units_ContractNumber","Units_ControllerTypeMessageId","Units_CreatedBy","Units_DataSource","Units_Details_DetailName","Units_Details_DetailNumber","Units_NumberOfLandings","Units_UnitDevices_CreatedBy","Units_UnitDevices_DeviceTypeMessageId","Units_UnitNumber"
"GrpName13","Test Group ",3,"2",2,"TestContract13",4,"user1","Factory","TestFloor13","5",4,"user1",1,"TestUnit13"
"GrpName13","Test Group ",3,"2",2,"TestContract13",4,"user1","Factory","TestFloor13","5",4,"user10",10,"TestUnit13"
"GrpName13","Test Group ",3,"99",99,"Contract99",99,"user99","Another Factory","TestFloor99","99",99,"user99",99,"Unit99"

CSV格式意味着您正在处理一个常规表。无法在CSV文件中正确表示树状结构。但是,如果要“转换”的结构始终具有相同的结构和相同数量的子结构,则可以将树结构转换为列,以相同的方式用于所有元素。例如:在生成CVS文件之前,您必须先“展平”您的结构。CSV格式意味着您正在处理一个常规表。无法在CSV文件中正确表示树状结构。但是,如果要“转换”的结构始终具有相同的结构和相同数量的子结构,则可以将树结构转换为列,以相同的方式用于所有元素。例如:在生成CVS文件之前,您必须先“展平”您的结构。