Экспорт данных Excel во вложенный JSON - PullRequest
0 голосов
/ 07 декабря 2018

Я экспортирую данные из Excel в стандартный формат JSON, используя модуль VBA JsonConverter.Вывод JSON аналогичен приведенному ниже: -

[{
    "Manufacturer": "Ford",
    "Code": 5551234,
    "Model": "Escort"
    "Status": "Available"
  },
  {
    "Manufacturer": "Ford",
    "Code": 5551335,
    "Model": "Mondeo"
    "Status": "Out of stock"
  },
  {
    "Manufacturer": "Ford",
    "Code": 5551240,
    "Model": "Fiesta"
    "Status": "Available"
  },
  {
    "Manufacturer": "BMW",
    "Code": 5552567,
    "Model": "M1"
    "Status": "Available"
  },
  {
    "Manufacturer": "BMW",
    "Code": 5552328,
    "Model": "M2"
    "Status": "Available"
  },
  {
    "Manufacturer": "BMW",
    "Code": 5552573,
    "Model": "M3"
    "Status": "Out of stock"
  }
]

Код VBA, который я использую, выглядит следующим образом: -

Sub Excel2JSON()

Dim excelRange As Range
Dim jsonItems As New Collection
Dim jsonDictionary As New Dictionary
Dim jsonFileObject As New FileSystemObject
Dim jsonFileExport As TextStream
Dim i As Long
Dim cell As Variant

Set excelRange = Cells(1, 1).CurrentRegion

For i = 2 To excelRange.Rows.Count
    jsonDictionary("Manufacturer") = Cells(i, 1)
    jsonDictionary("Code") = Cells(i, 2)
    jsonDictionary("Model") = Cells(i, 3)
    jsonDictionary("Status") = Cells(i, 4)

    jsonItems.Add jsonDictionary
    Set jsonDictionary = Nothing
Next i

Set jsonFileExport = jsonFileObject.CreateTextFile(".../cardata.json", True)
jsonFileExport.WriteLine (JsonConverter.ConvertToJson(jsonItems, Whitespace:=3))

End Sub

Затем я импортирую этот JSON в таблицу HTML, используя следующий скрипт: -

$(document).ready(function() {
  $.ajax({
    url: "cardata.json",
    method: "GET",
    dataType: "json",
    success: function(data) {
      var $tbody = $("table#data tbody");
      $.each(data, function(i, data) {
        var $tr = $("<tr></tr>");
        $tr.appendTo($tbody);
        var $td = $("<td></td>");
        $td.html(data.Manufacturer)
          .appendTo($tr);
        $td = $("<td></td>");
        $td.html(data.Code)
          .appendTo($tr);
        $td = $("<td></td>");
        $td.html(data.Model)
          .appendTo($tr);
        $td = $("<td></td>");
        $td.html(data.Status)
          .appendTo($tr);
      });
    },
  });
});

Вопрос / проблема двоякий.Я хочу импортировать JSON в две разные HTML-таблицы, а не в одну (одна таблица для Ford, другая для BMW и т. Д.).Я знаю, что JSON ниже будет работать с 2 разными таблицами, однако я не могу изменить код VBA для создания JSON, который выглядит следующим образом: -

{
  "Ford": [{
      "Code": 5551234,
      "Model": "Escort"
      "Status": "Available"
    },
    {
      "Code": 5551335,
      "Model": "Mondeo",
      "Status": "Out of stock"
    },
    {
      "Code": 5551240,
      "Model": "Fiesta",
      "Status": "Available"
    }
  ],
  "BMW": [{
      "Code": 5552567,
      "Model": "M1",
      "Status": "Available"
    },
    {
      "Code": 5552328,
      "Model": "M2",
      "Status": "Available"
    },
    {
      "Code": 5552573,
      "Model": "M3",
      "Status": "Out of stock"
    }
  ]
}

Альтернативой является сохранение JSON таким же, но изменение способа импорта скрипта в 2 разные HTML-таблицы.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Используя код, предоставленный Ash, таблицы теперь заполняются правильно.Возможно, я дописал данные до конца, но это работает.

$(document).ready(function() {
    $.ajax({
        url: "cardata.txt",
        method: "GET",
        dataType: "json",
        success: function(data) {
            var vendors = {};

            data.forEach(function(element) {

                if (!manufacturers[element.Manufacturer])
                    manufacturers[element.Manufacturer] = new Array();

                var obj = {};
                obj.Code = element.Code;
                obj.Model = element.Model;
                obj.Status = element.Status;
                manufacturers[element.Manufacturer].push(obj);
            });

            var $tbody = $("table#BMW tbody");
            $.each(manufacturers.BMW, function(i, data) {
                var $tr = $("<tr></tr>");
                $tr.appendTo($tbody);
                var $td = $("<td></td>");
                $td.html(data.Code)
                    .appendTo($tr);
                $td = $("<td></td>");
                $td.html(data.Model)
                    .appendTo($tr);
                $td = $("<td></td>");
                $td.html(data.Status)
                    .appendTo($tr);
            });

            var $tbody = $("table#Ford tbody");
            $.each(manufacturers.Ford, function(i, data) {
                var $tr = $("<tr></tr>");
                $tr.appendTo($tbody);
                var $td = $("<td></td>");
                $td.html(data.Code)
                    .appendTo($tr);
                $td = $("<td></td>");
                $td.html(data.Model)
                    .appendTo($tr);
                $td = $("<td></td>");
                $td.html(data.Status)
                    .appendTo($tr);
            });

            console.log(manufacturers); //As object
            console.log(JSON.stringify(manufacturers)); // In JSON

        }
    });
});
0 голосов
/ 08 декабря 2018

Ниже я изменил ваш JSON, используя jQuery в нужном вам формате.

 $(document).ready(function(){

 $.ajax({
          url: "cardata.json",
          method: "GET",
          dataType: "json",
          success: function(data){
            var manufacturers = {};

            data.forEach(function(element) {

               if(!manufacturers[element.Manufacturer])
                   manufacturers[element.Manufacturer] = new Array();

                   var obj = {};
                   obj.Code = element.Code;
                   obj.Model = element.Model;
                   obj.Status = element.Status;
                   manufacturers[element.Manufacturer].push(obj);
            });


           console.log(manufacturers); //As object
           console.log(JSON.stringify(manufacturers)); // In JSON

          }
      });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...